[백준/파이썬] 13549 숨바꼭질 3

#문제링크

https://www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

#나의풀이

import sys
from collections import deque

if __name__=="__main__":
    N, K = map(int, sys.stdin.readline().split())
    max_num = 100001
    DP = [2147000000] * (max_num)
    queue = deque()
    queue.append(N)
    DP[N] = 0
    while(queue):
        tmp = queue.popleft()

        if 0 <= tmp-1 < max_num and DP[tmp-1] > DP[tmp]+1:
            DP[tmp-1] = min(DP[tmp-1], DP[tmp]+1)
            queue.append(tmp-1)
        if 0 <= tmp+1 < max_num and DP[tmp+1] > DP[tmp]+1:
            DP[tmp+1] = DP[tmp]+1
            queue.append(tmp+1)
        if 0 <= tmp*2 < max_num and DP[tmp*2] > DP[tmp]:
            DP[tmp*2] = DP[tmp]
            queue.append(tmp*2)
        if tmp-1 == K or tmp*2 == K:
            print(DP[K])
            break

#해설

이 문제도 다익스트라로 구분되는데 DP로 풀었다.

시작점을 큐에 넣고 꺼내 이동할수 있는 3가지 방법으로 수를 이동시키고 조건에 맞다면 큐에 넣고 반복하여 돌려주었다.

수를 발견하면 출력해주고 종료시켜주었다.