Algorithm/Baekjoon

[Algorithm/Baekjoon] ํŒŒํ‹ฐ - 1238 (G3/JAVA)

dpdms2148 2023. 6. 22. 23:30
728x90

๐Ÿ“‘๋ฌธ์ œ๋งํฌ

1238๋ฒˆ: ํŒŒํ‹ฐ

๐Ÿ’ป์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int X = Integer.parseInt(st.nextToken());

        ArrayList<int[]>[] cost = new ArrayList[N + 1];
        ArrayList<int[]>[] reversCost = new ArrayList[N + 1];
        for (int i = 1; i < N + 1; i++) {
            cost[i] = new ArrayList<>();
            reversCost[i] = new ArrayList<>();
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            int time = Integer.parseInt(st.nextToken());
            cost[start].add(new int[]{end, time});
            reversCost[end].add(new int[]{start, time});
        }

        int[] timeSum = dijkstra(X, N, cost);
        int[] reversTimeSum = dijkstra(X, N, reversCost);

        int answer = 0;
        for (int i = 1; i < N + 1; i++) {
            answer = Math.max(answer, timeSum[i] + reversTimeSum[i]);
        }
        System.out.println(answer);
    }

    private static int[] dijkstra(int x, int n, ArrayList<int[]>[] cost) {
        int[] time = new int[n + 1];
        Arrays.fill(time, 1000000);

        // ์ตœ๋‹จ ์‹œ๊ฐ„๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋ฅผ ์•ž์— ๋ฐฐ์น˜
        PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(o -> o[1]));
        // ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ x๋กœ ํ•˜๊ณ  ๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
        pq.add(new int[]{x, 0});

        while (!pq.isEmpty()) {
            int[] cur = pq.poll();

            // ์ตœ์†Œ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๋…ธ๋“œ๋งŒ ํƒ์ƒ‰
            if (time[cur[0]] < cur[1]) continue;
            time[cur[0]] = cur[1];

            // ์ธ์ ‘ ๋…ธ๋“œ ์กฐ์‚ฌ
            for (int[] c : cost[cur[0]]) {
                pq.add(new int[]{c[0], cur[1] + c[1]});
            }
        }

        return time;
    }
}
//์ฐธ๊ณ  : https://girawhale.tistory.com/43

โณํšŒ๊ณ 

  • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด์„œ ํ’€์ดํ–ˆ๊ณ , ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ํ™œ์šฉํ•ด์„œ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ๋งŒ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ–ˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ ํ•ด์•ผ๊ฒ ๋‹ค.
728x90