# 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 |