[LeetCode#743] Network Delay Time

2024. 9. 15. 18:57·Algorithm/문제풀이

 

❒ Description


제목 Network Delay Time
링크 https://leetcode.com/problems/network-delay-time/description/
자료구조/알고리즘 그래프 / 다익스트라 알고리즘
시간 복잡도 O(ElogV)

 

다익스트라 알고리즘을 사용해서 해결할 수 있는 문제이다.

이번 문제는 중복을 허용하지 않기 위해서 visited boolean 배열을 사용하였다.

 

 

문제 해결 순서

  1. 주어진 input, times를 배열을 사용해서 표현해준다.
    • List<List<int[]>> : index는 source를 표현한다.
  2. 각 노드까지 걸리는 소요시간을 나타내는 배열을 생성한다.
    • 배열 생성 후 최초에는 무한대 값을 의미하는 1e9로 초기화 한다.
  3. 방문 여부를 확인할 배열을 생성한다.
  4. 소요 시간이 짧은 순서가 우선이 되는 Priority Queue를 생성한다.
    • 최초 진입 점은 input으로 주어진 k이며, 소요 시간은 0으로 생각해야 한다.
  5. Priority Queue가 빌 때 까지 반복한다.
    • PQ의 가장 앞 요소를 remove 한다.
    • 방문 여부를 확인한다. (재 방문한 노드라면 skip)
    • 방문한 곳에서 갈 수 있는 모든 노드를 탐색한다.
      • 더 짧은 경로로 노드를 방문했다면 2번에서 생성한 배열의 요소를 update
  6. 결과 출력
    • 모든 노드가 신호를 수신하는데 걸리는 최소 시간을 계산해야 한다.
    • 즉, 모든 노드 중에서 가장 신호를 늦게 받는 노드의 시간이 정답이 된다.
    • 만약 방문하지 못한 노드가 있을 경우 -1을 반환한다.

 

 

 

 

 

❒ Solution


더보기
public int networkDelayTime(int[][] times, int n, int k) {
    // #1
    List<List<int[]>> graph = new ArrayList<>();
    for (int i = 0; i <= n i++) graph.add(new ArrayList<>());
    for (int[] time : times) {
    	int source = time[0], target = time[1], time = time[2];
        graph.get(source).add(new in[]{target, time});
    }
    
    // #2
    int[] distance = new int[n+1];
    Arrays.fill(distance, 1e9);
    result[k] = 0;

    // #3
    boolean[] visited = new boolean[n+1];
    
    // #4
    Queue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(t -> t[1]));
    pq.offer(new int[]{k,0});
    
    // #5
    while (!pq.isEmpty()) {
        int[] node = pq.remove();
        int target = node[0], time = node[1];
        
        if (visited[target]) continue;
        visited[target] = true;
        
        for (int[] node : graph.get(target)) {
            int nextTarget = node[0];
            int nextTime = node[1];
            int totalTime = time + nextTime;
            if (totalTime < distance[nextTarget]) {
            	distance[target] = totalTime;
                pq.offer(target, distance[target]);
            }
        }
    }
    
    // #6
    int answer = Integer.MIN_VALUE;
    for (int i = 1; i <= n; i++) {
    	if (distance[i] == Integer.MIN_VALUE) return -1;
        answer = Math.min(answer, result[i]);
    }
    return answer;
}

 

 

 

 

 


'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#122] Best Time to Buy and Sell II  (0) 2024.09.16
[LeetCode#55] Jump Game  (0) 2024.09.16
[Programmers#49191] 순위  (0) 2024.09.14
[Programmers] 게임 맵 최단거리  (0) 2024.09.12
[LeetCode#787] Cheapest Flights Within K Stops  (0) 2024.09.10
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#122] Best Time to Buy and Sell II
  • [LeetCode#55] Jump Game
  • [Programmers#49191] 순위
  • [Programmers] 게임 맵 최단거리
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (173)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (7)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • 친절한 SQL 튜닝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    부분단조성
    Two-Pointer
    sliding-window
    오블완
    binarysearch
    greedy
    Back-Tracking
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[LeetCode#743] Network Delay Time
상단으로

티스토리툴바