[BOJ] ํ”Œ๋กœ์ด๋“œ - ๋ฐฑ์ค€ 11404, 1389 (์ž๋ฐ” JAVA) - ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ

    ๐Ÿ“Œ ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ

    ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ„์— ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์–ด๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V^3) (V๋Š” ๋…ธ๋“œ ์ˆ˜)์ด๋‹ค.

     

    1. ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ„ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”

     

    D[S][E]๋ฅผ ๋…ธ๋“œS์—์„œ ๋…ธ๋“œE๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ •์˜ํ•˜๊ณ , S์™€ E๊ฐ™์œผ๋ฉด D[S][E] = 0, ๋‚˜๋จธ์ง€๋Š” ๋ฌดํ•œ๋Œ€๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

     

    2. ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด์— ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ์ €์žฅ

     

    ์ถœ๋ฐœ๋…ธ๋“œ(S), ๋„์ฐฉ๋…ธ๋“œ(E), ๊ฐ€์ค‘์น˜(W) ์ •๋ณด๋ฅผ D[S][E] = W๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด์— ์ €์žฅ

     

    3. ์ ํ™”์‹์œผ๋กœ ๋ฐฐ์—ด ์—…๋ฐ์ดํŠธ

     

    ์‚ผ์ค‘ for๋ฌธ์œผ๋กœ ๊ฒฝ์œ ์ง€ K, ์ถœ๋ฐœ๋…ธ๋“œ S, ๋„์ฐฉ๋…ธ๋“œ E์— ๋Œ€ํ•ด D[S][E] = Math.min(D[S][E], D[S][K] + D[K][E]) ๋กœ ์—…๋ฐ์ดํŠธ

     

    ์ „์ฒด ๊ฒฝ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ๋ถ€๋ถ„ ๊ฒฝ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ค„์ง„๋‹ค๋Š” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋กœ ์œ„ ์ ํ™”์‹์ด ๋„์ถœ๋จ

     

    ๐Ÿ”’ ๋‚˜๋จธ์ง€ ํ•ฉ - ๋ฐฑ์ค€ 11404

    https://www.acmicpc.net/problem/11404

     

    ๋ฌธ์ œ

    n(2 ≤ n ≤ 100)๊ฐœ์˜ ๋„์‹œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋„์‹œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ๋„์‹œ์— ๋„์ฐฉํ•˜๋Š” m(1 ≤ m ≤ 100,000)๊ฐœ์˜ ๋ฒ„์Šค๊ฐ€ ์žˆ๋‹ค. ๊ฐ ๋ฒ„์Šค๋Š” ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•œ ๋น„์šฉ์ด ์žˆ๋‹ค.

    ๋ชจ๋“  ๋„์‹œ์˜ ์Œ (A, B)์— ๋Œ€ํ•ด์„œ ๋„์‹œ A์—์„œ B๋กœ ๊ฐ€๋Š”๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

     

    ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” ๋ฒ„์Šค์˜ ๊ฐœ์ˆ˜ m์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„๋ถ€ํ„ฐ m+2์ค„๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ„์Šค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋จผ์ € ์ฒ˜์Œ์—๋Š” ๊ทธ ๋ฒ„์Šค์˜ ์ถœ๋ฐœ ๋„์‹œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ฒ„์Šค์˜ ์ •๋ณด๋Š” ๋ฒ„์Šค์˜ ์‹œ์ž‘ ๋„์‹œ a, ๋„์ฐฉ ๋„์‹œ b, ํ•œ ๋ฒˆ ํƒ€๋Š”๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ c๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์‹œ์ž‘ ๋„์‹œ์™€ ๋„์ฐฉ ๋„์‹œ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋น„์šฉ์€ 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

    ์‹œ์ž‘ ๋„์‹œ์™€ ๋„์ฐฉ ๋„์‹œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋…ธ์„ ์€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค.

     

    ์ถœ๋ ฅ

    n๊ฐœ์˜ ์ค„์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. i๋ฒˆ์งธ ์ค„์— ์ถœ๋ ฅํ•˜๋Š” j๋ฒˆ์งธ ์ˆซ์ž๋Š” ๋„์‹œ i์—์„œ j๋กœ ๊ฐ€๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์ด๋‹ค. ๋งŒ์•ฝ, i์—์„œ j๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์ž๋ฆฌ์— 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

     

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            int M = sc.nextInt();
    
            long[][] distance = new long[N+1][N+1];
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    if(i == j) distance[i][j] = 0;
                    else distance[i][j] = Integer.MAX_VALUE;
                }
            }
            for (int i = 0; i < M; i++) {
                int u = sc.nextInt();
                int v = sc.nextInt();
                int w = sc.nextInt();
                if(distance[u][v] > w) distance[u][v] = w;
            }
            for (int k = 1; k <= N; k++) { // ๊ฒฝ์œ  ๋…ธ๋“œ k
                for (int i = 1; i <= N; i++) { // ์ถœ๋ฐœ ๋…ธ๋“œ i
                    for (int j = 1; j <= N; j++) { // ๋„์ฐฉ ๋…ธ๋“œ j
                        distance[i][j] = Math.min(distance[i][j],distance[i][k] + distance[k][j]);
                    }
                }
            }
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    if(distance[i][j] == Integer.MAX_VALUE)
                        System.out.print("0 ");
                    else
                        System.out.print(distance[i][j]+" ");
                }
                System.out.println();
            }
    
        }
    }

     

    ๐Ÿ”’ ์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™ - ๋ฐฑ์ค€ 1389

    https://www.acmicpc.net/problem/1389

     

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            int M = sc.nextInt();
    
            long[][] arr = new long[N+1][N+1];
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    if(i == j) arr[i][j] = 0;
                    else arr[i][j] = Integer.MAX_VALUE;
                }
            }
    
            for (int i = 1; i <= M; i++) {
                int s = sc.nextInt();
                int e = sc.nextInt();
                arr[s][e] = 1;
                arr[e][s] = 1;
            }
    
            for (int k = 1; k <= N; k++) {
                for (int i = 1; i <= N ; i++) {
                    for (int j = 1; j <= N; j++) {
                        if(arr[i][j] > arr[i][k] + arr[k][j])
                            arr[i][j] = arr[i][k] + arr[k][j];
                    }
                }
            }
    
            int[] sum = new int[N+1];
            int min = Integer.MAX_VALUE;
            int ans = -1;
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    sum[i] += arr[i][j];
                }
                if(min > sum[i]){
                    min = sum[i];
                    ans = i;
                }
            }
    
            System.out.println(ans);
    
        }
    
    }

     


    ์ฝ”ํ…Œ ์ •๋ฆฌ ๊นƒํ—ˆ๋ธŒ ๋งํฌ

     

    GitHub - HyperAlgorithmStudy/BaekJoon: Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์Šคํ„ฐ๋””

    Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์Šคํ„ฐ๋””. Contribute to HyperAlgorithmStudy/BaekJoon development by creating an account on GitHub.

    github.com

    ์ฐธ๊ณ : Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ: ์ž๋ฐ” ํŽธ - ๊น€์ข…๊ด€

    728x90

    ๋Œ“๊ธ€