๋ฌธ์  (Gold 3)

https://www.acmicpc.net/problem/1238
1238๋ฒ: ํํฐ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ M+1๋ฒ์งธ ์ค๊น์ง i๋ฒ์งธ ๋๋ก์ ์์์ , ๋์ , ๊ทธ๋ฆฌ๊ณ ์ด ๋๋ก๋ฅผ ์ง๋๋๋ฐ ํ์ํ ์์์๊ฐ Ti๊ฐ ๋ค์ด
www.acmicpc.net
ํ์ด
๋ง์๋ค์ธ N์์ ๋ชฉ์ ์ง X๊น์ง ๊ฑธ๋ฆฌ๋ ์ต๋จ๊ฑฐ๋ฆฌ -> A
๋ชฉ์ ์ง X์์ ๊ฐ ๋ง์ N๊น์ง ๊ฑธ๋ฆฌ๋ ์ต๋จ๊ฑฐ๋ฆฌ -> B
๋ฅผ ์ด์ฉํด์ ์๋ณต ๊ฑฐ๋ฆฌ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค!
B๋ ์ถ๋ฐ์ง๋ก๋ถํฐ ๋ชจ๋ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉ
A์ ๊ฒฝ์ฐ, ๋ชจ๋ ๋ ธ๋์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ค๋ ํ๋ก์ด๋ ์์ฌ์ ์ด์ฉํ๋ ค ํ์๋ค.
ํ์ง๋ง, ํ๋ก์ด๋ ์์ฌ์ ๊ฒฝ์ฐ ์๊ฐ์ด๊ณผ๋ก ์คํจ!
๊ทธ๋ ๋ค๋ฉด ๋ฐ๋๋ก ์๊ฐํด์,
๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋๋ก ์ ์ฅํ ํ์ ์ถ๋ฐ์ง X๋ก๋ถํฐ ๊ฐ ๋ง์ N๊น์ง ๊ฑธ๋ฆฌ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค!!!!!!
( ์ด ๋ถ๋ถ๊น์ง ์๊ฐํ๊ธฐ๊ฐ ๋งค์ฐ ์ค๋ ๊ฑธ๋ ธ๋ค ใ
 ใ
  )
์ฆ, A,B ๋ชจ๋ ๊ธฐ๋ณธ ๋ค์ต์คํธ๋ผ๋ฅผ ํตํด์ ๊ตฌํ๋ฉด ๋๋ ๊ฐ๋จํ ๋ฌธ์ !
์ฝ๋
package shortestPath;
import java.util.*;
import java.io.*;
public class BOJ_1238_ํํฐ {
    static int N,X;
    static List<int[]>[] road;
    static List<int[]>[] road_back;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        X = Integer.parseInt(st.nextToken())-1;
        road = new List[N];      // X์์ N ๋ง์๋ก ๊ฐ๋ ๊ฒฝ๋ก ํ๋ณํ  ๋
        road_back = new List[N]; // N ๋ง์๋ค์์ X๋ก ๊ฐ๋ ๊ฒฝ๋ก ํ๋ณํ  ๋
        for(int i =0 ; i < N ; i++){
            road[i] = new ArrayList<>();
            road_back[i] = new ArrayList<>();
        }
        for(int i =0 ; i < M ; i++){
            st = new StringTokenizer(br.readLine());
            int to = Integer.parseInt(st.nextToken())-1;
            int from = Integer.parseInt(st.nextToken())-1;
            int time = Integer.parseInt(st.nextToken());
            road[to].add(new int[]{from, time});
            road_back[from].add(new int[]{to, time});
        }
        int[] XToN = getDist(road);
        int[] NToX = getDist(road_back);
        int max = 0;
        for(int i =0 ; i < N ; i++){
            max = Math.max(max, XToN[i]+NToX[i]);
        }
        System.out.println(max);
    }
    private static int[] getDist(List<int[]>[] road) {
        int[] dist = new int[N];
        Arrays.fill(dist, Integer.MAX_VALUE);
        PriorityQueue<int[]> pq = new PriorityQueue<>(((o1, o2) -> Integer.compare(o1[1], o2[1])));
        boolean[] visited = new boolean[N];
        pq.offer(new int[]{X, 0});
        dist[X] = 0;
        while(!pq.isEmpty()){
            int[] cur = pq.poll();
            if(visited[cur[0]]) continue;   // ์ด๋ฏธ ๊ฒฝ๋ก ํ์์ด ๋์ด์์ผ๋ฉด ํ์ธํ  ํ์ ์์
            visited[cur[0]] = true;
            for(int[] r:road[cur[0]]){
                if(dist[r[0]] > dist[cur[0]] + r[1]){   // ํ์ฌ ๋
ธ๋๋ฅผ ๋ค๋ ธ๋ค ๊ฐ ๋๊ฐ ๋ ๋น ๋ฅผ ๊ฒฝ์ฐ
                    dist[r[0]] = dist[cur[0]] + r[1];
                    pq.add(new int[]{r[0], dist[r[0]]});
                }
            }
        }
        return dist;
    }
}'๐ ์๊ณ ๋ฆฌ์ฆ > ShortestPath' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [LeetCode] 1091. Shortest Path in Binary Matrix (ํด์, Kotlin ํ์ด) (0) | 2023.06.19 | 
|---|---|
| [๋ฐฑ์ค] 13549๋ฒ: ์จ๋ฐ๊ผญ์ง3 (0) | 2022.04.03 | 
| [๋ฐฑ์ค]11780๋ฒ ํ๋ก์ด๋2 (Java) (0) | 2022.02.21 | 
| [๋ฐฑ์ค] 16118๋ฒ ๋ฌ๋น์ฌ์ฐ (Java) (0) | 2022.02.08 | 
| [๋ฐฑ์ค] 1753๋ฒ ์ต๋จ๊ฒฝ๋ก (Java) (0) | 2021.08.24 | 
