백준_BFS_숨바꼭질_1397_파이썬

석준·2022년 8월 24일
0

백준_문제풀이

목록 보기
19/30
post-thumbnail

✅문제 요약

  1. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다.
  2. 수빈이는 걷거나 순간이동을 할 수 있다.
    • 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다.
    • 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
  1. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간을 출력

✅문제 풀이

수빈은 앞으로, 뒤로, 순간이동을 할 수 있다.
보통 구현문제에서 2차원 배열을 4방향으로 탐색하는 경우가 많은데,
조금 바꿔 생각해서 거리를 +1, -1, x2 로 움직인다고 생각하고 BFS 코드를 구현했다

from collections import deque
n, k = map(int, input().split())

visit = [0 for _ in range(100001)]

Q = deque([n])
answer = 100001

while Q:
    now = Q.popleft()

    if now==k:
        print(visit[now])
        exit()

    for next in (now-1, now+1, now*2):
        if 0 <= next < 100001 and not visit[next]:
            visit[next] = visit[now]+1
            Q.append(next)

print(answer)
profile
파이썬 서버 개발자 지망생

0개의 댓글