백준_숨바꼭질

파송송계란빡 ㅣ 2022. 7. 19. 20:01

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

#수빈이가 동생을 찾을 수 있는 가장 빠른 시간
백준_숨바꼭질