[Silver I] 숨바꼭질 - 1697
성능 요약
메모리: 35092 KB, 시간: 136 ms
분류
너비 우선 탐색, 그래프 이론, 그래프 탐색
제출 일자
2024년 10월 30일 13:54:13
문제 설명
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
풀이
import sys
from collections import deque
num = 100000
c = [0 for w in range(num+1)]
n , k = map(int,sys.stdin.readline().split())
q = deque()
q.append(n)
while(q):
x = q.popleft()
if(x == k):
print(c[x])
break
for i in (x-1,x+1,2*x):
if(i >= 0 and i <= num and c[i] == 0):
c[i] = c[x]+1
q.append(i)
* Bfs의 개념과 Dp의 개념을 동시에 사용한다.
한번 visit한 좌표는 이동 연산을 하지 않고(x-1, x+1, 2*2) 좌표에 저장한 값(depth)을 더해서 몇번 이동했는지 최소의 경우를 구할 수 있다.