골드5 : BFS 문제이다.

풀이

BFS에서 최단거리를 찾은 후 뒤에 탐색을 하지 않는 방법

Code

from collections import deque
import sys
 
input = sys.stdin.readline
MAXNUM = 1e6
N, K = map(int, input().split())
visited = [False] * int(MAXNUM + 1)
minTime, minTimeNumOfVisited = 1e6, 0
 
def BFS():
    global minTime, minTimeNumOfVisited
    q = deque()
    q.append((N, 0))
 
    while q:
        pos, time = q.popleft()
        visited[pos] = True
 
        if time > minTime:
            continue  # 애초에 현재걸린시간이 최소시간보다 크면 탐색할 이유가 없음
 
        if pos == K:
            minTime = min(minTime, time)  # 처음 방문하면 여기서 걸리게 되어있음
            minTimeNumOfVisited += 1
 
        nexts = [(pos - 1, time + 1), (pos + 1, time + 1), (2 * pos, time + 1)]
        for npos, ntime in nexts:
            if 0 <= npos <= MAXNUM and visited[npos] == False:
                q.append((npos, ntime))
 
BFS()
print(minTime)
print(minTimeNumOfVisited)

Reference