반응형
[Gold V] 숨바꼭질 3 - 13549
성능 요약
메모리: 35296 KB, 시간: 140 ms
분류
0-1 너비 우선 탐색, 너비 우선 탐색, 데이크스트라, 그래프 이론, 그래프 탐색, 최단 경로
제출 일자
2023년 11월 23일 20:21:20
문제 설명
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
풀이
더보기
from collections import deque
def bfs(s, e) :
# 1. q 생성, v[] 생성
q = deque()
v = [-1] * 100001
# 2. 초기 데이터 삽입, v[] 초기화
q.append(s)
v[s] = 0
while q :
c = q.popleft()
if c == e :
return v[e]
if 0 < c * 2 < 100001 and v[c * 2] == -1 :
v[c * 2] = v[c]
q.append(c * 2)
if 0 <= c - 1 < 100001 and v[c - 1] == -1 :
v[c - 1] = v[c] + 1
q.append(c - 1)
if 0 <= c + 1 < 100001 and v[c + 1] == -1 :
v[c + 1] = v[c] + 1
q.append(c + 1)
n, k = map(int, input().split())
res = bfs(n, k)
print(res)
순간이동은 0초간 발생하므로 +1을 하지 않았다. 이후 +1, -1 이동에 대해서는 +1초를 하였다.
특이한 점은 순간이동 if문을 가장 아래로 옮겼을 때, 오답으로 처리되었다는 점이다. 이 부분에 대해서 궁금해서 Claude 에 물었더니, 순간이동을 가장 위에 해야 최소값을 구할 수 있기 때문에 저렇게 하란다...
이 부분에 대해서는 추후 스터디를 통하여 알아보도록 할 것이다.
반응형