๋ฐ˜์‘ํ˜•
Notice
Recent Posts
Recent Comments
Link
ยซ   2025/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
03-11 05:31
๊ด€๋ฆฌ ๋ฉ”๋‰ด

ImJay

[BOJ/Java] 11404. ํ”Œ๋กœ์ด๋“œ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ - Java

[BOJ/Java] 11404. ํ”Œ๋กœ์ด๋“œ

ImJay 2025. 3. 10. 10:33
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ [BOJ/Java] 11404. ํ”Œ๋กœ์ด๋“œ


๐Ÿ’ก ๋ฌธ์ œ ํ•ด์„

N๊ฐœ์˜ ๋„์‹œ๊ฐ€ ์žˆ๊ณ , M๊ฐœ์˜ ๋ฒ„์Šค ๋…ธ์„ ์ด ์กด์žฌํ•œ๋‹ค.
๊ฐ ๋ฒ„์Šค๋Š” ํŠน์ •ํ•œ ๋น„์šฉ์ด ์žˆ์œผ๋ฉฐ, ๋„์‹œ ๊ฐ„ ์ตœ๋‹จ ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ”น ์ฃผ์–ด์ง„ ์ •๋ณด

  • N: ๋„์‹œ์˜ ๊ฐœ์ˆ˜ (2 ≤ N ≤ 100)
  • M: ๋ฒ„์Šค ๋…ธ์„ ์˜ ๊ฐœ์ˆ˜ (1 ≤ M ≤ 100,000)
  • A B C: A๋ฒˆ ๋„์‹œ์—์„œ B๋ฒˆ ๋„์‹œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์ด C (์ค‘๋ณต ๊ฐ€๋Šฅ)

โœ… ๋ชฉํ‘œ:
1๏ธโƒฃ ๋ชจ๋“  ๋„์‹œ ์Œ(i → j)์— ๋Œ€ํ•œ ์ตœ์†Œ ๋น„์šฉ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๊ธฐ
2๏ธโƒฃ ๊ฒฝ๋กœ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅ


๐Ÿ“ ํ’€์ด ๊ณผ์ •

1๏ธโƒฃ ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

  • ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N³), N=100์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅ

2๏ธโƒฃ ์ดˆ๊ธฐํ™”

  • ๋ฌดํ•œ๋Œ€(INF) ๊ฐ’ ์„ค์ • (dist[i][j] = INF)
  • ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ dist[i][i] = 0
  • ์ž…๋ ฅ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ ์ง์ ‘ ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ฑฐ๋ฆฌ ์„ค์ •

3๏ธโƒฃ ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์ˆ˜ํ–‰

  • k๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ฒฝ๋กœ(i → k → j)๋ฅผ ๊ณ ๋ คํ•˜์—ฌ i → j๋กœ ๊ฐ€๋Š” ์ตœ์†Œ ๋น„์šฉ ๊ฐฑ์‹ 

๐Ÿ’ป ์ฝ”๋“œ (Java)

import java.util.*;

public class Main {
    static final int INF = 1000000000;
    static int N, M;
    static int[][] dist;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        dist = new int[N + 1][N + 1];

        // ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        for (int i = 1; i <= N; i++) {
            Arrays.fill(dist[i], INF);
            dist[i][i] = 0; // ์ž๊ธฐ ์ž์‹ ์€ 0
        }

        // ์ž…๋ ฅ ๋ฐ›๊ธฐ
        for (int i = 0; i < M; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c = sc.nextInt();
            dist[a][b] = Math.min(dist[a][b], c); // ๊ฐ™์€ ๋…ธ์„ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ์ˆ˜ ์žˆ์Œ
        }

        // ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰
        for (int k = 1; k <= N; k++) {
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    if (dist[i][k] != INF && dist[k][j] != INF) {
                        dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
                    }
                }
            }
        }

        // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= N; j++) {
                System.out.print((dist[i][j] == INF ? "0" : dist[i][j]) + " ");
            }
            System.out.println();
        }
    }
}

โฑ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

  • ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜: O(N³), N ≤ 100์ด๋ฏ€๋กœ 100³ = 1,000,000 ์—ฐ์‚ฐ์€ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅ

๐Ÿง ๋Š๋‚€ ์ 

โœ… ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋ฅผ ์ตํž ์ˆ˜ ์žˆ์—ˆ๋‹ค.
โœ… ์ค‘๋ณต ๊ฐ„์„ ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Math.min()์œผ๋กœ ์ตœ์†Œ ๋น„์šฉ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค.
โœ… ๊ฒฝ๋กœ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿš€ ๊ทธ๋ž˜ํ”„ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ์˜ ๊ธฐ๋ณธ ์ค‘ ๊ธฐ๋ณธ! ํ™•์‹คํ•˜๊ฒŒ ์ตํ˜€์•ผ ํ•  ๋ฌธ์ œ๋‹ค. ๐Ÿ˜Š

 
 
 
๋ฐ˜์‘ํ˜•
Comments