[프로그래머스] 배달

쏠로몬·2021년 10월 15일
0

접근 방법 : 다익스트라 (BFS + heapq)

heaqp에 넣을 때 인자 순서는 가중치를 앞에 놔 주자.
가지치기(프루닝)를 알게 되었다. 최단 경로 = 다익스트라 잊지 말자.

import sys
import heapq

def solution(N, road, K):
    answer = 0
    max_size = sys.maxsize
    # 다익스트라
    # heapq에 시간, 마을 번호로 집어 넣음
    graph = [[] for _ in range(N + 1)]
    
    for start, dest, time in road:
        graph[start].append((dest, time))
        graph[dest].append((start, time))
    
    deliver_time = [max_size for _ in range(N + 1)]
    deliver_time[1] = 0
    
    que = []
    heapq.heappush(que, (0, 1))
    
    while que:
        time, now = heapq.heappop(que)
        
        # 가지치기 (프루닝)
        if deliver_time[now] < time:
            continue
        
        for next, next_deliver in graph[now]:
            next_time = next_deliver + time
            
            if deliver_time[next] > next_time:
                deliver_time[next] = next_time
                heapq.heappush(que, (next_time, next))
            
    
    for i in range(1, N + 1):
        if deliver_time[i] <= K:
            answer += 1

    return answer
profile
이사가요~ 티스토리 블로그 입니다. https://help-solomon.tistory.com/

0개의 댓글