์ด๋ ๋ฐฉ์์ ๋ฐ๋ผ ๊ฐ์ค์น๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์ต์คํธ๋ผ ์ต๋จ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํ์ดํ๋ค.
์ฐ์ ์์ ํ(ํ ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ)๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์งง๊ฒ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋จผ์ ๊บผ๋ด์ ํ์์ ์งํํ๊ฒ ๋๋ค. ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ ํ์ฌ ํ์์ ์งํํ๋ ค๋ ์์น(x
)๊น์ง์ ์๊ฐ(visited[x]
)์ด ํจ๊ป ๊บผ๋ด์ง ํ์ฌ๊น์ง์ ์๊ฐ(dist
)๋ณด๋ค ๋ ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ํ์์ ์งํํ๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํ๋ค. ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒฝ์ฐ 1. ์ด๋ฏธ ๋ ์งง์ ์๊ฐ์ผ๋ก ๋ฐฉ๋ฌธํ๊ณ , 2. ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๋ฐฉ๋ฌธํ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ
# ์จ๋ฐ๊ผญ์ง 3
import heapq
N, K = map(int, input().split())
def sol():
if N >= K:
return N-K
visited = [1e9]*100001
visited[N] = 0
pq = [(0, N)]
while pq:
dist, x = heapq.heappop(pq)
if visited[x] != dist:
continue
if x+1 < 100001 and visited[x+1] > dist+1:
visited[x+1] = dist+1
heapq.heappush(pq, (dist+1, x+1))
if x-1 > -1 and visited[x-1] > dist+1:
visited[x-1] = dist+1
heapq.heappush(pq, (dist+1, x-1))
if 2*x < 100001 and visited[2*x] > dist:
visited[2*x] = dist
heapq.heappush(pq, (dist, 2*x))
return visited[K]
print(sol())