본문 바로가기
백준/실버 1

1697번 - 숨바꼭질(Python)

by 김주현3902 2025. 1. 24.

풀이

dp 및 bfs를 이용해 목적지까지의 최단 시간을 계산한다.

X 위치까지의 최단 시간을 dp에 저장한다.

X 위치에서 이동할 수 있는 X-1, X+1, X*2 위치의 dp값을 dp[X]+1로 저장한다.

이들을 큐에 넣어 bfs를 실행한다.

방문 여부는 dp값을 -1과 비교하여 확인한다.

dp[K] 값을 구했다면, while문을 종료하고 답을 출력한다.

코드

from collections import deque

N, K = map(int, input().split())

dp = [-1 for _ in range(100001)]
dp[N] = 0
queue = deque([N])

while queue:
    node = queue.popleft()
    tmp = [node - 1, node + 1, node * 2]

    for t in tmp:
        if 0 <= t < 100001 and dp[t] == -1:
            dp[t] = dp[node] + 1
            queue.append(t)
    if K in tmp:
        print(dp[K])
        break

'백준 > 실버 1' 카테고리의 다른 글

2156번 - 포도주 시식(Python)  (0) 2025.01.25
1932번 - 정수 삼각형(Python)  (0) 2025.01.24
1149번 - RGB거리  (0) 2025.01.23
2667번 - 단지번호붙이기(Python)  (0) 2025.01.23
2178번 - 미로 탐색(Python)  (0) 2025.01.23