π λ¬Έμ λ§ν¬
13549λ²: μ¨λ°κΌμ§ 3
π λ¬Έμ μμ½
μλΉμ΄λ μ¨λ°κΌμ§ μ€μ΄λ€. μμ μ N, λμμ Kμ μμΉνκ³ μλ κ²μ μκ² λμλ€. μλΉμ΄μ μμΉκ° XμΌ λ κ±·λλ€λ©΄ 1μ΄ λ€μ, X+1, X-1λ‘ μ΄λνλ€. λλ, μκ°μ΄λνμ¬ 0μ΄ νμ 2*Xλ‘ μ΄λν μ μλ€. μλΉμ΄κ° λμμκ² κ°μ₯ λΉ λ₯΄κ² κ°λ μκ°μ ꡬνμμ€.
πΏ νμ΄ μ€λͺ
그리λ λ¬Έμ λ‘ ν΄κ²°νλ € νμ§λ§, νλ Έμ΅λλ€ λ‘ μΈν΄ λ¬Έμ μ νμ νμΈνμλ€.
κ·Έλν μ΄λ‘ , νΉν λλΉ μ°μ νμμ μ¬μ©νμ¬ νμ΄μΌ νλ€λ κ²μ νμΈνμλ€.
μ κ·Όλ° κ·Έλν.? π«€
λ΄κ° μλ κ·Έλνλ
μ΄λ° 건λ°... μ§κΈ λ¬Έμ μ μνλ [{νμ¬ μμΉ}, {μκ°}] μ΄λ©΄ κ°μ μ κ°μ€μΉλ₯Ό μ΄λ»κ² μ μν΄μΌ νμ§?
μ¨λ°κΌμ§ 3μ κ°μ μ κ°μ€μΉκ° λ³ν μ μλ κ·Έλνλ‘ λ¬Έμ λ₯Ό ν΄μνμ¬ νΈλ κ²μ΄ ν΅μ¬μ΄μλ€.
1. 첫 λ²μ§Έ μλ: 그리λ μκ³ λ¦¬μ¦ (νλ Έμ΅λλ€.)
λ¬Έμ μ μΆλ ₯ μμλ‘,
μ λ ₯: 5 17
μΆλ ₯: 2
κ° μμλλ°, 17μμ β νμλ©΄, +1 λλ -1 νμ 2λ‘ λλλ€. β‘ μ§μλ©΄, λ°λ‘ 2λ‘ λλλ€. λ₯Ό λ°λ³΅νμ λμλ κ°μ μΆλ ₯κ°μ κ°μ§λ κ²μ λ°κ²¬νλ€. μ λ ₯μ΄ '4 17', '6 17'μμλ μ λ΅μ΄ λμ€λ κ²μ νμΈνκ³ λ΅μμ μμ±νμλ€.
1ν μ€λ΅ ν, μ§λ¬Έ κ²μνμμ λ°λ‘ λͺ¨μμ νμΈνμκ³ , '0 K' ννμ λ΅μμμ νλ‘κ·Έλ¨μ΄ μ’ λ£λμ§ μλ μμΈκ° μμ΄ μ΄ κ²½μ° μμΈ μ²λ¦¬κΉμ§ νμμΌλ, μ€λ΅ νμ λμλ€.
그리λλ‘ μλνλ νμ΄ (νλ Έμ΅λλ€)
from collections import deque
N, K=map(int, input().split())
min_time=1000001
if N==0 and K!=0:
N=1
nxt=deque([(K, 1)])
else:
nxt=deque([(K, 0)])
while nxt:
x, time=nxt.popleft()
if x<=N:
min_time=min(min_time, time+(N-x))
continue
if x%2==0:
nxt.append((x//2, time))
elif x%2==1:
nxt.append(((x+1)//2, time+1))
nxt.append(((x-1)//2, time+1))
print(min_time)
2. λ λ²μ§Έ μλ: BFSλ₯Ό μ¬μ©ν νμ΄
BFSλ‘ λ¬Έμ λ₯Ό ν λ, μ£Όμν΄μΌ ν μ μ λ€μκ³Ό κ°λ€.
β» μΌλ°μ μΈ μ μμ λ€λ₯Έ ν¬μΈνΈ: visitedλ₯Ό λ°©λ¬Έ μ¬λΆλ₯Ό λ΄μ listκ° μλλΌ, BFSμμ ν΄λΉ λ Έλλ₯Ό λ°©λ¬Έν μ§ κ²°μ νλ μ 보 listλΌκ³ μκ°νμ.
β visitedλ₯Ό μ¬μ©νμ§ μμΌλ©΄ X+1κ³Ό X-1μ 무νμΌλ‘ μλ€κ°λ€νλ©° νλ‘κ·Έλ¨μ΄ μ’ λ£λμ§ μλλ€. λ°λΌμ μ¬μ©νμ¬μΌ νλ€.
β‘ visitedμ min_timeμ μ μ₯νμ¬, ν΄λΉ min_timeλ³΄λ€ μμ κ²½μ° λ Έλμ λ°©λ¬Ένλλ‘ μ€μ νμ¬μΌ νλ€. λ°©λ¬Έ λ Έλμ μμλ₯Ό queueλ‘ κ΄λ¦¬νλλ°, λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μμ μ΅λ¨ 거리λ₯Ό 보μ₯νλ €λ©΄ κ° λ Έλλ³ κ°μ₯ μμ κ°μ€μΉλ₯Ό κ°μ§ λ Έλλ₯Ό λ¨Όμ νμνμ¬μΌ νλ€. νμ§λ§, μ½λκ° time μμ΄ μλλΌ κ±·κΈ° λλ μκ°μ΄λμ νμμ μ¦κ° μμΌλ‘ appendλλ―λ‘ μ΄ μ‘°κ±΄μ λ§μ‘±νμ§ μλλ€.
μ λ΅ νμ΄
from collections import deque
N, K=map(int, input().split())
nxt=deque([(N, 0)])
visited=[1000001 for _ in range(100001)]
min_time=1000001
while nxt:
x, time=nxt.popleft()
if x<0 or x>100000:
continue
if visited[x]>time:
visited[x]=time
elif visited[x]<=time:
continue
if x>=K:
min_time=min(time+x-K, min_time)
continue
nxt.append((2*x, time))
nxt.append((x+1, time+1))
nxt.append((x-1, time+1))
print(min_time)
λ¬Έμ λ₯Ό κ·Έλνλ‘ μ΄ν΄νλ€λ κ²μ λν μμΌκ° μ»€μ§ κΈ°λΆμ΄λ€ π