import sys
from collections import deque
input = sys.stdin.readline
Max = 100001
n, m = map(int, input().split())
dq = deque()
dq.append(n)
dis = [-1 for _ in range(Max)]
dis[n] = 0
while dq:
a = dq.popleft()
if a == m:
break
if a * 2 < Max and dis[a * 2] == -1:
dq.appendleft(a * 2)
dis[a * 2] = dis[a]
if a + 1 < Max and dis[a + 1] == -1:
dq.append(a + 1)
dis[a + 1] = dis[a] + 1
if a - 1 >= 0 and dis[a - 1] == -1:
dq.append(a - 1)
dis[a - 1] = dis[a] + 1
print(dis[m])
- 현재 위치에서 *2 로 이동하는것은 비용이 0 이다.
- 1번에 의해서 큐에 제일 앞에 넣어줘서 *2로 이동할 수 있는 모든경우의 수 를 dis(거리)에 저장을 해준다.
- 그 이후에 + 1 , -1 거리를 이동하는 경우를 넣어준다.
제일 중요한건 *2로 이동하는 가중치가 0 이기 때문에 체크를 할 경우에
큐에 가장 앞에 넣어주는게 제일 중요한 키포인트