# 1697 숨바꼭질
# 수빈이는 N 동생은 K
# 수빈이는 X-1 or X+1 2*X
N,M = map(int,input().split())
result = 0
stack = [(N,0)]
visited = [0]*100001
while stack:
cu_n,cnt = stack.pop(0)
if cu_n == M:
break
if 0<= cu_n <= 100000:
if 0<= cu_n -1 <= 100000:
if not visited[cu_n-1]:
visited[cu_n-1] =1
stack.append((cu_n-1,cnt+1))
if 0<= cu_n+1 <= 100000:
if not visited[cu_n+1]:
visited[cu_n+1] =1
stack.append((cu_n+1,cnt+1))
if 0<= cu_n*2 <= 100000:
if not visited[cu_n*2]:
visited[cu_n*2] =1
stack.append((cu_n*2,cnt+1))
print(cnt)
BFS의 일종으로 볼 수 있다.
현재 위치에서 +1, -1 , *2 를 했을 때의 값을 추가해주고, BFS에서는 먼저 들리는 곳이 가장 가까운 곳이므로, 한번 방문했던 곳은 연산량을 줄이기 위해 방문을 표시해주었다. 그리고 최초로 목표 위치인 M을 방문하면 반복문을 멈추게 했다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 2178 미로탐색 (0) | 2021.01.09 |
---|---|
[BOJ] 1764 듣보잡 (0) | 2021.01.09 |
[BOJ] 1676 팩토리얼 0의 개수 (0) | 2021.01.09 |
[BOJ] 1330 두 수 비교하기 (0) | 2021.01.09 |
[BOJ] 1001 A-B (0) | 2021.01.09 |