자료구조와 알고리즘/🥑알고리즘

[알고리즘][최단 거리] - 1. 네트워크 딜레이 타임

얄루몬 2022. 4. 8. 19:25

 

📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님' 책을 보고 작성되었습니다.


😎문제 : https://leetcode.com/problems/network-delay-time/

k부터 출발해 모든 노드가 신호를 받을 수 있는 시간을 계산하라. 불가능할 경우 -1을 리턴한다. 입력값(u,v,w)는 각 출발지, 도착지, 소요 시간으로 구성되며, 전체 노드의 개수는 N으로 입력받는다.


[다익스트라 알고리즘 구현]

import collections
import heapq


class Solution(object):
    def networkDelayTime(self, times, n, k):
        graph = collections.defaultdict(list)

        #그래프 인접 리스트 구성
        for u,v,w in times:
            # u -> v로 가는 비용이 w라는 의미
            graph[u].append((v,w))

        #큐 변수: [(소요 시간, 정점)]
        q = [(0,k)]

        #거리 비교를 위한 변수
        distant = collections.defaultdict(int)

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

            if node not in distant:
                distant[node] = time
                for v, w in graph[node]:
                    alt = time + w
                    heapq.heappush(q(alt, v))
        if len(distant) == n:
            return max(distant.values())
        return -1