[ํ๋ก์ด๋-์์ ]-ํฉ์น ํ์ ์๊ธ
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋ ์ฌ๋์ด s์์ ์ถ๋ฐํด์ ๊ฐ๊ฐ์ ๋์ฐฉ ์ง์ ๊น์ง ํ์๋ฅผ ํ๊ณ ๊ฐ๋ค๊ณ ๊ฐ์ ํ ๋, ์ต์ ์์ ํ์ ์๊ธ return
- ์์ ํฉ์นํ์ง ์๊ณ ๊ฐ์ ์ด๋ํ๋ ๊ฒฝ์ฐ์ ์์ ํ์์๊ธ์ด ๋ ๋ฎ๋ค๋ฉด, ํฉ์นํ์ง ์์๋ ๋จ
- 3 ≤ n ≤ 200
- 1 ≤ s, a, b ≤ n
์ ์ถ๋ ฅ ์์
| n | s | a | b | fares | result |
| 6 | 4 | 6 | 2 | [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] | 82 |
| 7 | 3 | 4 | 1 | [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] | 14 |
ํ์ด ๋ฐฉ๋ฒ
์ฒ์ ์ ๊ทผํ ๋ฐฉ์
‘๋ฌด์ง + ์ดํผ์น = ํ์ ์๊ธ์ ๊ตฌํ๋ ๊ฒ’ ์ด๊ธฐ ๋๋ฌธ์, ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํด์ S์์ A ํน์ B๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ฉด์ ๋์์ ๊ทธ ์ต๋จ ๊ฒฝ๋ก๊น์ง ๊ฐ๋ ๋ฃจํธ๋ฅผ ๊ตฌํ๋ ค๊ณ ํ์
์ต๋จ ๊ฒฝ๋ก๊น์ง ๊ฐ๋ ๋ฃจํธ ์ค ๊ฒน์น๋ ๋ฃจํธ๋ฅผ ์ต์ข ์ ์ผ๋ก ๋นผ์ฃผ๋ ค๊ณ ํ์
์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ต์ข ์ ์ผ๋ก ๋ฐ์ํ๋ ํ์ ์๊ธ์ ์ต์ ๊ฐ์ ์ ๋๋ก ๊ตฌํ ์ ์์
⇒ ๊ฒฐ๊ตญ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๊ฒ ๋์…
ํ์ด ์ฐธ๊ณ ๋ฐฉ์
์ด ๋ฌธ์ ๋ S์์ ์์ํด์ ์ด๋ค ๋ฃจํธ๋ฅผ ๊ฑฐ์ณ์ ์ต์ข ๋ชฉ์ ์ง์ ๋๋ฌํ๋ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ค ๋ฃจํธ์ ๋ถ๋ถ์ ๊ตฌํ๊ธฐ ์ํด์๋ ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ์ ์ ๊น์ง์ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ธ ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ผ ํจ!
ํ์ฌ N์ ์ต๋๊ฐ 200์ด๊ธฐ ๋๋ฌธ์, ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ์๊ฐ ๋ณต์ก๋๋ O($N^3$) = ๋๋ต O($200^3$) = 8000000์
- ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํจ
- ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ต์ ๋น์ฉ์ ๊ตฌํ ์ ์์
- ์๋ก ๋ฐ๋ก ํ์๋ฅผ ํ๊ณ ๊ฐ๋ ๊ฒฝ์ฐ → route[s][a] + route[s][b]
- ํน์ ์ง์ ์ ๊ฒฝ์ ํด์ ๊ฐ์์ ๋ชฉ์ ์ง๋ก ๊ฐ๋ ๊ฒฝ์ฐ → route[s][k] + route[k][a] + route[k][b]
- ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํ ๊ฒ ์ค์ ์ต์ ๊ฐ์ ์ฐพ์ผ๋ฉด ๋จ
์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ด์ฉํด ํ์ด๋ณด๋ฉด,
1. ์ฃผ์ด์ง fares๋ฅผ ํตํด ํ ์ด๋ธ ์ฑ์ฐ๊ธฐ(์ฐ๊ฒฐ๋์ง ์์ ๋ถ๋ถ์ INF๋ก ์ฑ์ฐ๊ธฐ)

2. ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ ์ด์ฉํด์ ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก ๊ตฌํ๊ธฐ

3. ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ํ์ ์๊ธ ๊ตฌํ๊ธฐ
3-1) ์๋ก ํ์๋ฅผ ๋ฐ๋ก ํ๋ ๊ฒฝ์ฐ: route[4][6] + route[4][2] = 35 + 66 = 101
3-2) ํน์ ๋ฃจํธ๋ฅผ ๊ฒฝ๋กํด์ ๊ฐ์์ ๋ชฉ์ ์ง๋ก ๊ฐ๋ ๊ฒฝ์ฐ
- 1๋ฒ ๋ฃจํธ ๋ค๋ ธ๋ค ๊ฐ๋ ๊ฒฝ์ฐ: route[4][1] + route[1][6] + route[1][2] = 10 + 25 + 63 = 98
- 2๋ฒ ๋ฃจํธ ๋ค๋ ธ๋ค ๊ฐ๋ ๊ฒฝ์ฐ: route[4][2] + route[2][6] + route[2][2] = 66 + 48 + 0 = 114
- 3๋ฒ ๋ฃจํธ ๋ค๋ ธ๋ค ๊ฐ๋ ๊ฒฝ์ฐ: route[4][3] + route[3][6] + route[3][2] = 51 + 26 + 22 = 99
- 4๋ฒ ๋ฃจํธ ๋ค๋ ธ๋ค ๊ฐ๋ ๊ฒฝ์ฐ: route[4][4] + route[4][6] + route[4][2] = 101 ⇒ ์๋ก ํ์๋ฅผ ๋ฐ๋ก ํ๋ ๊ฒฝ์ฐ์ ๋์ผํจ
- 5๋ฒ ๋ฃจํธ ๋ค๋ ธ๋ค ๊ฐ๋ ๊ฒฝ์ฐ: route[4][5] + route[5][6] + route[5][2] = 34 + 2 + 46 = 82
- 6๋ฒ ๋ฃจํธ ๋ค๋ ธ๋ค ๊ฐ๋ ๊ฒฝ์ฐ: route[4][6] + route[6][6] + route[6][2] = 35 + 0 + 48 = 83
์ฝ๋
import java.util.*;
class Solution {
static int INF = Integer.MAX_VALUE;
public int solution(int n, int s, int a, int b, int[][] fares) {
// ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ํ
์ด๋ธ ์ฑ์ฐ๊ธฐ
int[][] route = new int[n+1][n+1];
for(int r=1; r<=n; r++) {
for(int c=1; c<=n; c++) {
// ๋ณธ์ธ ์ ์ ์ด๋ฉด 0์ผ๋ก ์ค์ , ๊ทธ ์ธ์๋ INF๋ก ์ด๊ธฐํ
if(r != c) route[r][c] = INF;
}
}
// ์ฐ๊ฒฐ๋ ๊ฒฝ๋ก ํ์
for(int[] fare : fares) {
route[fare[0]][fare[1]] = fare[2];
route[fare[1]][fare[0]] = fare[2];
}
// ํ๋ก์ด๋-์์
์๊ณ ๋ฆฌ์ฆ ์ํ
for(int k=1; k<=n; k++) {
for(int r=1; r<=n; r++) {
for(int c=1; c<=n; c++) {
if(r == c) continue;
if(route[r][k] == INF || route[k][c] == INF) continue;
route[r][c] = Math.min(route[r][c], route[r][k] + route[k][c]);
}
}
}
int answer = INF;
// ์๋ก ๊ฐ์ ๊ฐ๋ ๊ฒฝ์ฐ์ ํน์ ๊ฒฝ๋ก๋ฅผ ๊ฒฝ์ ํด์ ๊ฐ๋ ๊ฒฝ์ฐ ์ค ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ
for(int mid=1; mid<=n; mid++) {
int cost = route[s][mid] + route[mid][a] + route[mid][b];
answer = Math.min(answer, cost);
}
return answer;
}
}'์๊ณ ๋ฆฌ์ฆ > ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค-60059]์๋ฌผ์ ์ ์ด์ (0) | 2026.06.29 |
|---|---|
| [SWEA-2001] ํ๋ฆฌ ํด์น (0) | 2026.06.23 |
| [ํ๋ก๊ทธ๋๋จธ์ค-12907] ๊ฑฐ์ค๋ฆ๋ (0) | 2026.06.17 |
| [ํ๋ก๊ทธ๋๋จธ์ค-258711] ๋๋๊ณผ ๋ง๋ ๊ทธ๋ํ (0) | 2026.05.27 |
| [ํ๋ก๊ทธ๋๋จธ์ค-49191] ์์ (0) | 2026.05.17 |