<aside> 🔥 리트코드 743번 문제 링크

</aside>

<aside> 🔥 문제 정리

k부터 출발해 모든 노드가 신호를 받을 수 있는지 구하는 문제

불가능하면 -1을 리턴한다.

입력값 n : 노드의 개수

입력값 u, v, w 는 출발지 도착지 소요 시간으로 구성된다.

Untitled

Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
Output: 2

</aside>

<aside> 🔥 접근 방법

문제가 처음에는 다소 이해가 안갔는데 간단하게 생각하면 단방향으로 연결되어있는 간선에서

시작지점 k에서 시작할 때 갈 수있는 간선이 없으면 -1을 출력하고, 나머지는 다익스트라 최단거리를

구해서 최대값을 반환하면 될거 같다.

</aside>

<aside> 🔥 코드

기본적인 다익스트라 알고리즘을 활용했다.

다른 점은 아래 코드인데 만약 간선이 없어 갈곳이 없으면 거리 테이블은 무한으로 지정되어있을 것이다.

따라서 합계가 무한대이상이면 -1을 출력하고 아니면 가장 먼곳까지 도달하는 시간을 출력한다.

result = dist[1:]
            if sum(result) >= INF:
                return -1
            else:
                return max(result)

아래 나머지 코드는 기본적인 힙을 이용한 다익스트라 알고리즘이다.

class Solution:
    def networkDelayTime(self, times, n, k):
        INF = int(1e9)
        graph = [[] for _ in range(n + 1)]
        for time in times:
            a, b, c = time
            graph[a].append((b, c))
        
        def dijkstra_pq(graph, start):
            N = len(graph)
            dist = [INF] * N

            q = []
            heapq.heappush(q, (0, start))
            dist[start] = 0
            while q:
                acc, cur = heapq.heappop(q)

                if dist[cur] < acc:
                    continue

                for adj, d in graph[cur]:
                    cost = acc + d

                    if cost < dist[adj]:
                        dist[adj] = cost
                        heapq.heappush(q, (cost, adj))
            
            result = dist[1:]

</aside>