[백준] 13549 숨바꼭질

문제링크 : https://www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

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

www.acmicpc.net

 

import heapq
n, k = map(int, input().split())
INF = int(1e9)
dis = [INF] * 100001

def dikjstra(n):
    q = []
    heapq.heappush(q, [0, n])
    dis[n] = 0

    while q:
        time, now = heapq.heappop(q)

        if now == k:
            return dis[now]

        for next in (now*2, now-1, now+1):
            if 0<= next < 100001:
                if next == now*2:
                    if time < dis[next]:
                        dis[next] = time
                        heapq.heappush(q, [time, next])
                else:
                    temp = time + 1
                    if temp < dis[next]:
                        dis[next] = temp
                        heapq.heappush(q, [temp, next])

print(dikjstra(n))

 

오답노트

: 처음에는 숨바꼭질1을 풀듯이 bfs로 풀었다가 시간초과가 나서 고민을 하다, 다익스트라를 활용해야함을 알게되었다.

이후 temp를 사용하지않고 time +=1 했다가 다음 For문에서 time이 누적된 채 돌아가서 오답을 뱉어내 가벼운 디버깅 과정을 통해 잘못된 부분을 찾았다. 위치 이동 문제에서 그래프 범위안에 있는지 확인해주는걸 잊지말자!

'Algorithm > Python' 카테고리의 다른 글

[백준] 9017 크로스 컨트리  (0) 2024.03.12
[백준] 17142 연구소3  (1) 2024.03.07
[백준] 14891 톱니바퀴  (0) 2024.03.01
[백준] 3055 탈출  (0) 2024.02.03
[백준] 2467 용액  (0) 2023.10.24