Algorithm/BaekJoon

[백준/Python] 13549번-숨바꼭질 3

빵빵0 2023. 9. 10. 00:40
import sys
from collections import deque

input = sys.stdin.readline
MAX = 100000 + 1

n, k = map(int, input().split())
visited = [-1] * MAX  # [위치][시간] 으로 하려고 했으나 메모리 초과로 [위치]=시간으로 바꿈(물론 dist 배열을 따로 둬도 됨)

def bfs():
    q = deque()
    q.append(n)
    visited[n] = 0

    while q:
        loc = q.popleft()

        # 동생 위치를 찾음
        if loc == k:
            return visited[loc]

        # 순간이동
        if loc * 2 < MAX and visited[loc*2] == -1:
            visited[loc*2] = visited[loc]
            q.appendleft(loc*2) # 2*s가 다른 연산보다 더 높은 우선순위를 가지기 위함(순간이동이 최단시간 도출에 핵심이라 먼저 해야 값이 저장됨)

        # 걷기
        for dx in [-1, 1]:
            nx = loc + dx
            if 0 <= nx < MAX and visited[nx] == -1:
                visited[nx] = visited[loc] + 1
                q.append(nx)


print(bfs())