b1956. ์šด๋™

2025. 3. 20. 23:00ยทAlgorithm & Data Structures/BOJ

 

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

 

 

 

๐Ÿ“Œ ์ž๋ฐ”(Java)๋กœ ํ‘ธ๋Š” ์šด๋™ ๋ฌธ์ œ - ๋ฐฑ์ค€ 1956 ๐Ÿšด‍โ™‚๏ธ

๐Ÿ”Ž ๋ฌธ์ œ ๊ฐœ์š”

 

๋ฐฑ์ค€ 1956๋ฒˆ - ์šด๋™ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

V๊ฐœ์˜ ๋งˆ์„๊ณผ E๊ฐœ์˜ ๋„๋กœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,

“ํ•œ ๋งˆ์„์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค์‹œ ๊ทธ ๋งˆ์„๋กœ ๋Œ์•„์˜ค๋Š” ์ตœ์†Œ ์‚ฌ์ดํด์˜ ๊ธธ์ด” ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๐Ÿšด ์ฆ‰, ์ตœ๋‹จ ์‚ฌ์ดํด(์ˆœํ™˜ ๊ฒฝ๋กœ)์˜ ๊ธธ์ด๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

 



๐Ÿ’ก ์˜ˆ์ œ ์ž…๋ ฅ

3 4
1 2 1
3 1 1
2 3 1
1 3 5

๐Ÿ’ก ์˜ˆ์ œ ์ถœ๋ ฅ

3

โžก ์ตœ๋‹จ ์‚ฌ์ดํด์˜ ๊ธธ์ด๊ฐ€ 3์ธ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„ ์ถœ๋ ฅ

 



๐Ÿ›  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ์‹

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Floyd-Warshall Algorithm) ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

โœ๏ธ ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ

 

โœ” ๋ชจ๋“  ์ •์  ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•จ

โœ” ๊ฐ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋‹ค์‹œ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ตœ์†Œ ๋น„์šฉ์„ ์ฐพ์•„์•ผ ํ•จ

โœ” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ O(V³) ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

 



๐Ÿ”น Java ์ฝ”๋“œ ํ•ด์„ค

import java.io.*;
import java.util.*;

public class Main {

    static int V, E;
    static int INF = 40000000;  // ์ถฉ๋ถ„ํžˆ ํฐ ๊ฐ’ ์„ค์ •
    static int[][] graph;

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

        V = stringToInt(st.nextToken());
        E = stringToInt(st.nextToken());

        graph = new int[V + 1][V + 1];
        for (int i = 0; i <= V; i++)
            Arrays.fill(graph[i], INF);

        for (int i = 0; i <= V; i++)
            graph[i][i] = 0;  // ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” 0

        for (int i = 0; i < E; i++) {
            st = new StringTokenizer(br.readLine());
            int a = stringToInt(st.nextToken());
            int b = stringToInt(st.nextToken());
            int c = stringToInt(st.nextToken());

            graph[a][b] = c;
        }  // ์ž…๋ ฅ ์ข…๋ฃŒ

        logic();

        int answer = INF;
        for (int i = 1; i <= V; i++) {
            answer = Math.min(answer, graph[i][i]);  // ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ
        }
        System.out.println((answer == INF) ? -1 : answer);
    }

    static void logic() { // ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        for (int k = 1; k <= V; k++) { // ๊ฒฝ์œ ์ง€
            for (int i = 1; i <= V; i++) { // ์ถœ๋ฐœ์ง€
                for (int j = 1; j <= V; j++) { // ๋„์ฐฉ์ง€
                    if (graph[i][j] > graph[i][k] + graph[k][j]) {
                        graph[i][j] = graph[i][k] + graph[k][j];
                    }
                }
            }
        }
    }

    static int stringToInt(String s) {
        return Integer.parseInt(s);
    }
}

 



๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

 

๐Ÿ“Œ 1. ๊ทธ๋ž˜ํ”„ ์ž…๋ ฅ ๋ฐ ์ดˆ๊ธฐํ™”

graph = new int[V + 1][V + 1];
for (int i = 0; i <= V; i++)
    Arrays.fill(graph[i], INF);

for (int i = 0; i <= V; i++)
    graph[i][i] = 0;  // ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” 0

โœ” INF(40000000) ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์ตœ์†Œ๊ฐ’ ๋น„๊ต์— ํ™œ์šฉ

โœ” ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” 0์œผ๋กœ ์„ค์ •

 



๐Ÿ“Œ 2. ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰

for (int k = 1; k <= V; k++) { // ๊ฒฝ์œ ์ง€
    for (int i = 1; i <= V; i++) { // ์ถœ๋ฐœ์ง€
        for (int j = 1; j <= V; j++) { // ๋„์ฐฉ์ง€
            if (graph[i][j] > graph[i][k] + graph[k][j]) {
                graph[i][j] = graph[i][k] + graph[k][j];
            }
        }
    }
}

โœ” ๋ชจ๋“  ์ •์  ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ฐฑ์‹ 

โœ” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด O(V³) ์‹œ๊ฐ„ ์•ˆ์— ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

 



๐Ÿ“Œ 3. ์ตœ์†Œ ์‚ฌ์ดํด ๊ธธ์ด ์ฐพ๊ธฐ

int answer = INF;
for (int i = 1; i <= V; i++) {
    answer = Math.min(answer, graph[i][i]);  // ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ
}
System.out.println((answer == INF) ? -1 : answer);

โœ” ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„ ์ถœ๋ ฅ

โœ” ์‚ฌ์ดํด์ด ์—†๋Š” ๊ฒฝ์šฐ -1 ์ถœ๋ ฅ

 


๐Ÿ† ์ •๋ฆฌ

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ

 

โœ” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ •์  ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐ

โœ” ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„ ์ถœ๋ ฅ

โœ” O(V³) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

 



๐ŸŽฏ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฅ์ 

 

โœ… ๋ชจ๋“  ์ •์  ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ

โœ… ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์–ด๋„ ์ ์šฉ ๊ฐ€๋Šฅ (์Œ์ˆ˜ ์‚ฌ์ดํด์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ)

โœ… ์ฝ”๋“œ๊ฐ€ ์ง๊ด€์ ์ด๊ณ  ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•จ

 



์ด ๊ธ€์ด ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ข‹์•„์š”์™€ ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๐Ÿ˜Š

 

 

'Algorithm & Data Structures > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

b.3273 ๋‘ ์ˆ˜์˜ ํ•ฉ  (0) 2025.04.01
b.11657 ํƒ€์ž„๋จธ์‹   (0) 2025.03.20
b.9370 ๋ฏธํ™•์ธ ๋„์ฐฉ์ง€  (0) 2025.03.15
b.1707 ์ด๋ถ„ ๊ทธ๋ž˜ํ”„  (0) 2025.03.12
b24445. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 2  (1) 2025.03.06
'Algorithm & Data Structures/BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • b.3273 ๋‘ ์ˆ˜์˜ ํ•ฉ
  • b.11657 ํƒ€์ž„๋จธ์‹ 
  • b.9370 ๋ฏธํ™•์ธ ๋„์ฐฉ์ง€
  • b.1707 ์ด๋ถ„ ๊ทธ๋ž˜ํ”„
Geisha
Geisha
๊ฐœ๋ฐœ ์ผ๊ธฐ
  • Geisha
    Geisha
    Geisha
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (313)
      • Algorithm & Data Structures (235)
        • BOJ (93)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (25)
        • SQL (19)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • ์šด์˜์ฒด์ œ (13)
        • ๋„คํŠธ์›Œํฌ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Stack
    ๋ฐฑํŠธ๋ž˜ํ‚น
    ๋™์ ๊ณ„ํš๋ฒ•
    baekjoon
    ๊ฒฝ๋กœ์••์ถ•
    Union-Find
    dp
    unionfind
    programmers
    DynamicProgramming
    ํˆฌํฌ์ธํ„ฐ
    Java
    ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ
    ๊ตฌํ˜„
    ํ›„์œ„์ˆœํšŒ
    algorithm
    SQL
    ์ „์œ„์ˆœํšŒ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    BFS
    Dijkstra
    dfs
    PriorityQueue
    ๋ฐฑ์ค€
    binarySearch
    ๊ณจ๋“œ
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ์ด๋ถ„ํƒ์ƒ‰
    ์Šคํƒ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Geisha
b1956. ์šด๋™
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”