SWEA (SW Expert Academy)/D3

[SWEA/D3] 16800 구구단 걷기

2023. 5. 9. 23:26

문제 바로가기

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

나의 코드 및 설명 - BFS로 풀려다가 런타임에러 발생

from collections import deque

def bfs(x,y):
    queue = deque()
    queue.append((x,y))
    v[y][x] = 1
    while queue:
        x,y = queue.popleft()
        if x*y == n:
            return v[y][x] - 1
        for i in range(2):
            nx = x+dx[i]
            ny = y + dy[i]
            queue.append((nx,ny))
            v[ny][nx] = v[y][x] + 1

t = int(input())
for test_case in range(1,t+1):
    n = int(input())
    v = [[0] * n for _ in range(n)]
    dx= [1,0]
    dy = [0,1]
    print(bfs(1,1))

다른 코드 및 설명 01 - 임의의 최솟값 비교 변수(ans) 활용하여 최솟값을 구하는 방식

import math
t = int(input())
for test_case in range(1,t+1):
    n = int(input())
    total = []
    #n의 제곱근만큼만 확인해보면 된다.
    for i in range(1, int(math.sqrt(n)) +1):
        if n%i == 0:
            total.append((i, n//i)) #서로 곱했을 때 n이 나오는 두 숫자를 리스트에 저장한다.
    ans = 1000000e9
    for (x,y) in total: #리스트에 저장된 숫자들을 하나씩 꺼내본다.
        distance = x-1 + y-1 #(1,1)부터 (x,y)까지의 거리를 distance에 저장
        if ans > distance: #최솟값을 찾는다.
            ans = distance
    print("#{} {}".format(test_case, ans))

다른 코드 및 설명 02 - 좌표가 저장되어 있던 리스트에 거리정보를 저장하고, min() 메서드를 통해 최솟값을 구하는 방식

import math
t = int(input())
for test_case in range(1,t+1):
    n = int(input())
    total = []
    for i in range(1, int(math.sqrt(n)) +1):
        if n%i == 0:
            total.append((i, n//i))
    for i in range(len(total)): #1,1에서 시작
        distance = total[i][0]-1 + total[i][1]-1
        total[i] = distance
    print("#{} {}".format(test_case, min(total)))

피드백

n이 x,y좌표의 곱이기 때문에 x,y 좌표만 구한다면 최소 거리를 구할 수 있다. 최단거리를 구하는 문제이기 때문에 기계적으로 BFS을 활용하여 문제를 해결하려 했는데, 3번 TC의 어마무시한 입력 값 때문에 실패했다. 고민하다가 다른 사람의 코드를 보고 방향을 잡을 수 있었다. 생각보다 복잡하지 않고 단순하게 풀 수 있었다. 약간의 꼼수도 필요한 문제. 문제를 풀 때 이러한 발상의 창의성을 기르기 위해 노력해야겠다. 

'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글

[SWEA/D3] 14413 격자판 칠하기 / for문을 한 번만 사용하는 연습이 필요하다..  (0) 2023.05.09
[SWEA/D3] 14555 공과 잡초  (0) 2023.05.09
[SWEA/D3] 16910 원 안의 점  (0) 2023.05.09
[SWEA/D3] 6808 규영이와 인영이의 카드게임 / 백트래킹  (0) 2023.05.08
[SWEA/D3] 6190 정곤이의 단조 증가하는 수  (1) 2023.05.07
'SWEA (SW Expert Academy)/D3' 카테고리의 다른 글
  • [SWEA/D3] 14413 격자판 칠하기 / for문을 한 번만 사용하는 연습이 필요하다..
  • [SWEA/D3] 14555 공과 잡초
  • [SWEA/D3] 16910 원 안의 점
  • [SWEA/D3] 6808 규영이와 인영이의 카드게임 / 백트래킹
hellosonic
hellosonic
꾸준함hellosonic 님의 블로그입니다.
hellosonic
꾸준함
hellosonic
전체
오늘
어제
  • 분류 전체보기 (285)
    • SSAFY (4)
    • 프로그래머스 데브코스 (26)
    • Diary (1)
    • JavaScript (20)
    • ToyPJ (13)
      • Python-Django (13)
    • CS지식 (11)
      • 자료구조 (5)
      • 개발 상식 (2)
      • 네트워크 (4)
    • Baekjoon (141)
      • IM Level (57)
      • DFS와 BFS (21)
      • 백트래킹 (21)
      • DP (3)
      • 이분탐색 (4)
      • 구현 (14)
    • Programmers (13)
      • Lv1 (4)
      • Lv2 (9)
    • SWEA (SW Expert Academy) (52)
      • D1 (5)
      • D2 (7)
      • D3 (40)
    • 이코테 (4)
    • Grammar (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • 프론트엔드 데브코스
  • 파이썬 1946
  • 파이썬 1269
  • 백준 18870
  • 백준
  • 리액트 todolist
  • SWEA D2
  • 파이썬 2529
  • 자바스크립트
  • 코딩부트캠프
  • 구현
  • JS
  • 파이썬
  • 파이썬 11478
  • 백준 14891
  • SWEA D3
  • 백준 5212
  • SWEA 파이썬
  • SWEA
  • 그리디
  • 백준 1157
  • 국비지원교육
  • SWEA/D3
  • javascript ux
  • 파이썬 1436
  • 프로그래머스 데브코스
  • 백준 2999
  • 자바스크립트 기본기
  • 프로그래머스
  • 이코테

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
[SWEA/D3] 16800 구구단 걷기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.