https://www.acmicpc.net/problem/1697
5(N)에서 갈 수 있는 방법은 3가지 (N-1, N+1, N*2)
MAX 만큼 0으로 초기화된 dist 리스트를 생성해주고 ,
3가지 방법 중 하나를 이용한 이동 위치(nx)가 0~MAX 사이 and dist[nx] = 0이면
dist[nx] = 현재 위치(x)의 dist 값 + 1을 해준다.❓ Why dist[nx] = 0 조건이 필요한가?
이미 그 위치로 이동했었다면, queue에 이미 해당 위치가 append가 되었을 것이다.
이 조건이 없었다면 nx 위치 중복이 되어 최소 시간이 아니라 시간이 중복으로 + 됐을 것.
최소 시간을 카운트하기 위해! = 모든 위치는 1번만 queue에 들어가면 된다. ( 각각의 위치는 모두독립적
이다. 연속성이 없음 )
from collections import deque
n, k = map(int, input().split())
MAX = 10**5
dist = [0] * (MAX + 1) # indexError 방지 -> MAX만큼 list 생성
def bfs(x):
queue = deque()
queue.append(x)
while queue:
x = queue.popleft()
if x == k:
print(dist[x])
break
for nx in (x-1, x+1, x*2):
if 0 <= nx <= MAX and not dist[nx]: # k보다 초과한 수에서 x-1 방법이 최소 시간이 걸리는 정답일 수도 있으니까 조건을 nx <= MAX로 설정
dist[nx] = dist[x] + 1
queue.append(nx)
bfs(n)