본문 바로가기
코딩테스트 파이썬/백준

숨바꼭질 2 ( 12851번 )

by 세용용용용 2025. 4. 5.

12851번: 숨바꼭질 2

 

나의 풀이

import sys, heapq

def _main(n, k):
    answer = 0
    visit = [int(1e9)] * 100001
    visit[n] = 0
    hq = [(0, n)]

    while hq:
        now_cost, now_point = heapq.heappop(hq)
        if (now_point == k):
            answer += 1
        else:
            for next_point in (now_point + 1, now_point - 1, now_point * 2):
                if (0 <= next_point < 100001) and (visit[next_point] >= now_cost + 1):
                    visit[next_point] = now_cost + 1
                    heapq.heappush(hq, (now_cost + 1, next_point))
    
    return f"{visit[k]}\n{answer}"
    
n, k = map(int, sys.stdin.readline().rstrip().split())
print(_main(n, k))

 

시간 복잡도

while hq : n 번 반복 ( 선형 시간 복잡도 )
    heappop, heappush : 로그 시간 복잡도

해당 알고리즘 시간 복잡도 : 선형 로그 시간 복잡도 ( O(n log n) )

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

최소비용 구하기 2 ( 11779번 )  (0) 2025.04.10
아기 상어 ( 16236번 )  (0) 2025.04.05
이진 검색 트리 ( 5639번 )  (0) 2025.03.31
후위 표기식 ( 1918번 )  (0) 2025.03.30
웜홀 ( 1865번 )  (0) 2025.03.30