01-08 08:57
Recent Posts
Recent Comments
관리 메뉴

miinsun

[BAEKJOON] λ°±μ€€ ν”Œλ‘œμ΄λ“œ μ›Œμ…œ 11404 :: ν”Œλ‘œμ΄λ“œ λ³Έλ¬Έ

Algorithm/Baekjoon

[BAEKJOON] λ°±μ€€ ν”Œλ‘œμ΄λ“œ μ›Œμ…œ 11404 :: ν”Œλ‘œμ΄λ“œ

miinsun 2022. 6. 9. 15:50

πŸ’¬  문제 μ„€λͺ…

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을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯ 1)

5
14
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
3 5 10
3 1 8
1 4 2
5 1 7
3 4 2
5 2 4

 

예제 좜λ ₯ 1)

0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0

 

​

πŸ’»  Main.java

  • λͺ¨λ“  경둜의 μ΅œλ‹¨ 경둜λ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ” λ¬Έμ œλŠ” 'ν”Œλ‘œμ΄λ“œ μ›Œμ…œ' μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν’€μ΄ν•œλ‹€.
  • distance[i][j] 이차원 배열에 iλΆ€ν„° jλ…Έλ“œκΉŒμ§€μ˜ μ΅œλ‹¨ 거리λ₯Ό κΈ°λ‘ν•œλ‹€.
    • ν”Œλ‘œμ΄λ“œ μ›Œμ…œμ€ 동적 ν”„λ‘œκ·Έλž˜λ°μ— μ†ν•œλ‹€.
  • 점화식은 λ‹€μŒκ³Ό κ°™λ‹€.
/* λ°±μ€€ ν”Œλ‘œμ΄λ“œμ›Œμ…œ - 11404 :: ν”Œλ‘œμ΄λ“œ */
import java.util.*;
import java.io.*;

public class Main {
	static int n, m;
	static int[][] distance;
	static final int INF = 9999999;

	public static void main(String[] args) throws IOException{
		Scanner sc = new Scanner (System.in);
		
		n = sc.nextInt();	// λ„μ‹œμ˜ 개수, λ…Έλ“œμ˜ 개수
		m = sc.nextInt();	// λ²„μŠ€μ˜ 개수, κ°„μ„ μ˜ 개수
		distance = new int[n + 1][n + 1];
		
        // μ΄ˆκΈ°ν™”
		for(int i = 0; i <= n; i++) {
			for(int j = 0; j <= n; j++) {
				if(i == j) continue;
				distance[i][j] = INF;
			}
		}
		
        // κ°„μ„  μž…λ ₯
		for(int i = 0; i < m; i++) {
			int start = sc.nextInt();
			int end = sc.nextInt();
			int time = sc.nextInt();
			distance[start][end] = Math.min(distance[start][end], time);
		}
		
		/* ν”Œλ‘œμ΄λ“œ μ›Œμ…œ μ•Œκ³ λ¦¬μ¦˜ μˆ˜ν–‰ */
		for(int k = 1; k <= n; k++) {		// 기쀀이 λ˜λŠ” κ±°μ³κ°€λŠ” λ…Έλ“œ
			for(int i = 1; i <= n; i++) {	// μΆœλ°œν•˜λŠ” λ…Έλ“œ
				for(int j = 1; j <= n; 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] == INF) System.out.print("0 ");
				else
					System.out.print(distance[i][j] + " ");
			}
			System.out.println();
		}
		
        sc.close();
	}
}
Comments