import sys
from tabnanny import check
sys.stdin = open("20220719_백준_숨바꼭질3.txt", "r")
from collections import deque
n, k = map(int, input().split()) # n: 수빈이가 있는 위치, k: 동생이 있는 위치
q = deque()
q.append(n) #처음 수빈이의 위치 큐에 넣기
visited = [-1 for _ in range(100)]
visited[n] = 0 #처음 수빈이의 위치 n 방문처리
#BFS로 모든 경우를 체크
#다만 이때 0초로 이동하는 것이 가장 우선 체크
#항상 가장 처음에 위치 시킨다.
#큐에 이동 좌표 하나씩, 넣음
#하나씩 빼서 2*x, s-1, s+1 중 하나 이동
#5-10-9-18-17
while q:
s = q.popleft() #큐서 하나씩 빼기
if s == k: #수빈이가 동생을 찾는 경우 출력
print(visited[s])
break
# 순간이동 0초
# 방문하지 않은 경우에만 2*x만큼 이동
if 0 < s*2 < 100001 and visited[s*2] == -1:
visited[s*2] = visited[s] + 0 #0초 걸림
q.appendleft(s*2) # 2*s 가 다른 연산보다 더 높은 우선순위를 가지기 위해서 맨 앞에 넣기
# 걷기 x-1이동 1초
# 방문하지 않은 경우에만 s-1이동
if 0 <= s-1 < 100001 and visited[s-1] == -1:
visited[s-1] = visited[s] + 1 #1초 걸림
q.append(s-1) #s-1만큼 이동한 위치 큐에 넣기
#걷기 x+1이동 1초
# 방문하지 않은 경우에만 s+1이동
if 0 <= s+1 < 100001 and visited[s+1] == -1:
visited[s+1] = visited[s] + 1 #1초 걸림
q.append(s+1) #s+1민큼 이동한 위치 큐에 넣기
print(visited)
#수빈이는 현재 N
#동생은 K
#수빈이의 위치가 X일때 걷는 다면
#1초 후에 걷는 경우 x-1 or x+1
#순간이동 하는 경우 0초 후에 2*x
#수빈이가 동생을 찾을 수 있는 가장 빠른 시간
'코테풀이 > BFS' 카테고리의 다른 글
[백준 | 실버2] 1012: 유기농배추(BFS) (0) | 2022.08.08 |
---|---|
[백준 | 실버1] 2178: 미로탐색(BFS) (0) | 2022.08.08 |
백준_9466_텀프로젝트 (0) | 2022.07.18 |
[백준 |골드5] 2206_벽 부수고 이동하기 (0) | 2022.07.16 |
[백준 | 골드4] 2146_다리만들기(BFS, 떨어져있는 섬, 번호부여, 최단거리) (0) | 2022.07.15 |
백준_숨바꼭질