[λ°±μ€] 1697 μ¨λ°κΌμ§ (python νμ΄μ¬)
1697λ²: μ¨λ°κΌμ§
μλΉμ΄λ λμκ³Ό μ¨λ°κΌμ§μ νκ³ μλ€. μλΉμ΄λ νμ¬ μ N(0 ≤ N ≤ 100,000)μ μκ³ , λμμ μ K(0 ≤ K ≤ 100,000)μ μλ€. μλΉμ΄λ κ±·κ±°λ μκ°μ΄λμ ν μ μλ€. λ§μ½, μλΉμ΄μ μμΉκ° XμΌ
www.acmicpc.net
BFSλ₯Ό νμ©ν μ΅μ μκ°μ ꡬνλ λ¬Έμ .
μμ΄λμ΄
νμ¬ μμΉ(x)μμ κ° μ μλ 거리λ x - 1, x + 1, x * 2μ΄λ€.
κ° κ²½μ°λ§λ€ ifλ¬Έμ ν΅ν΄ 쑰건μ νμΈν΄μ€λ€.
μ΄μ μ λ°©λ¬Ένμ§ μμ μμΉλΌλ©΄ κ·Έ μμΉκΉμ§ 걸리λ μκ°λ€μ BFSλ°©μμΌλ‘ μννλ©° μκ°μ μ μ₯ν΄μ€λ€.
μ 체 μ½λ
from collections import deque
N, K = map(int, input().split())
deq = deque()
deq.append(N)
visited = [-1] * 100001
visited[N] = 0
while deq:
x = deq.popleft()
if x == K:
print(visited[x])
break
for i in [x - 1, x + 1, x * 2]:
if 0 <= i <= 100000 and visited[i] == -1:
visited[i] = visited[x] + 1
deq.append(i)
μ½λ μ€λͺ
while deq:
x = deq.popleft()
if x == K:
print(visited[x])
break
for i in [x - 1, x + 1, x * 2]:
if 0 <= i <= 100000 and visited[i] == -1:
visited[i] = visited[x] + 1
deq.append(i)
μ£Όμ΄μ§ λ²μ(0 ~ 100000)μ μλμ§ νμΈνκ³ λ°©λ¬Έ μ 무λ₯Ό λ°μ§λ€.
λ°©λ¬Έ κ°λ₯νλ©΄ μ΄μ κΉμ§ μμλ μκ°μμ + 1 ν΄μ€λ€.
λͺ©ν μμΉμ λμ°©νλ©΄ μ΅μμκ°μ μΆλ ₯ν΄μ€λ€.
BFSμ΄λ―λ‘ κ° μμΉλ§λ€ μλμ μΌλ‘ μ΅μμκ°μ΄ μ μ₯λλ€.