# 숨바꼭질 3
from collections import deque
def bfs():
q = deque()
q.append(N)
while q:
now = q.popleft()
if now == M:
return visited[now]
for k in [now-1, now+1, now*2]:
nnow = k
if 0 <= nnow < 1000001 and visited[nnow] == 0:
if nnow == now*2 and now != 0:
visited[nnow] = visited[now]
q.appendleft(nnow)
else:
visited[nnow] = visited[now] + 1
q.append(nnow)
N, M = map(int, input().split())
visited = [0] * 1000001
print(bfs())
BFS
1. deque인 q에 현재위치를 추가
2. q가 빌 때까지 q에서 now를 pop
- q에 append (now+1, now-1은 append) (now*2는 우선순위가 높아서 appendleft)
- 방문체크 (now+1, now-1은 +1) (now*2는 순간이동이므로 +0)
3. M에 도착시 return
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 17142번 - 연구소 3 (파이썬) (0) | 2022.01.20 |
---|---|
[백준] 4485번 - 녹색 옷 입은 애가 젤다지? (파이썬) (0) | 2022.01.20 |
[백준] 1325번 - 효율적인 해킹 (파이썬) (1) | 2022.01.20 |
[백준] 2178번 - 미로 탐색 (파이썬) (0) | 2022.01.20 |
[백준] 1806번 - 부분합 (파이썬) (0) | 2022.01.20 |