https://www.acmicpc.net/problem/11780
๐ ์๋ฐ(Java)๋ก ํธ๋ ํ๋ก์ด๋ 2 - ๋ฐฑ์ค 11780 ๐ฃ๏ธ
์ต๋จ ๊ฑฐ๋ฆฌ + ๊ฒฝ๋ก ์ถ๋ ฅ๊น์ง ํฌํจํ ํ๋ก์ด๋ ์์ (Floyd-Warshall)
๐ ๋ฌธ์ ๊ฐ์
๋ฐฑ์ค 11780 - ํ๋ก์ด๋ 2๋
๋ชจ๋ ๋์ ์์ ๋ํด ์ต๋จ ๊ฒฝ๋ก์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ,
๊ฐ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ง์ ๊ฒฝ๋ก๋ก ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
๐ก ์์ ์ ๋ ฅ
5
14
1 2 2
1 3 3
1 4 1
...
๐ก ์์ ์ถ๋ ฅ
0 2 3 1 10
0
2 1 2
3 1 3
2 1 4
...
๐ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ ๋ฐฉ์
์ด ๋ฌธ์ ๋ ์ ํ์ ์ธ Floyd-Warshall (ํ๋ก์ด๋-์์ ) ์๊ณ ๋ฆฌ์ฆ์
โ ๊ฒฝ๋ก ์ถ์ ๊น์ง ๋ง๋ถ์ด๋ ๊ตฌ์กฐ์ ๋๋ค.
- costs[i][j]: ๋์ i์์ j๊น์ง์ ์ต์ ๋น์ฉ
- lists[i][j]: ๋์ i์์ j๊น์ง ์ด๋ํ ๋ ๊ฑฐ์ณ์ผ ํ๋ ๊ฒฝ์ ๋์ ๋ฆฌ์คํธ
๐น Java ์ฝ๋ ์ค๋ช
๐ ์ด๊ธฐํ
costs = new int[N+1][N+1];
lists = new ArrayList[N+1][N+1];
โ costs[i][j]๋ฅผ INF๋ก ์ด๊ธฐํํ๋ฉฐ
โ ๊ฒฝ๋ก ์ ์ฅ์ฉ lists[i][j]๋ ๊ฐ ์๋ง๋ค ArrayList ์์ฑ
๐ ๊ฐ์ ์ ๋ ฅ
costs[a][b] = Math.min(cost, costs[a][b]);
โ ๋์ผ ๋ ธ์ ์ค ๋ ์งง์ ๋น์ฉ๋ง ์ ์ฅ
๐ ํ๋ก์ด๋ ์์ ํต์ฌ
if (costs[i][j] > costs[i][k] + costs[k][j]) {
costs[i][j] = costs[i][k] + costs[k][j];
routeTracking(i, j, k);
}
โ i → j๋ก ๋ฐ๋ก ๊ฐ๋ ๊ฒ๋ณด๋ค
โ i → k → j๊ฐ ๋ ์ ๋ ดํ๋ค๋ฉด ๊ฐฑ์
โ ์ด ๋ ๊ฒฝ๋ก ๋ฆฌ์คํธ๋ ์ ๋ฐ์ดํธ
๐ ๊ฒฝ๋ก ๊ฐฑ์ ํจ์
public static void routeTracking(int i, int j, int k){
lists[i][j].clear();
lists[i][j].addAll(lists[i][k]);
lists[i][j].add(k);
lists[i][j].addAll(lists[k][j]);
}
โ ์ค๊ฐ์ k๋ฅผ ๊ฑฐ์น ๊ฒฝ๋ก๋ก ์ ์ฒด ๊ฒฝ๋ก ์ ๋ฐ์ดํธ
โ ์ฌ๊ท๊ฐ ์๋ ํ๋ซํ ๋ฆฌ์คํธ ๊ตฌ์กฐ ์ ์ง
๐ ์ถ๋ ฅ
โถ ๊ฑฐ๋ฆฌ ์ถ๋ ฅ
if (costs[i][j] == INF) sb.append(0 + " ");
else sb.append(costs[i][j] + " ");
โถ ๊ฒฝ๋ก ์ถ๋ ฅ
int size = lists[i][j].size();
sb.append((size + 2) + " " + i + " ");
for (int num : lists[i][j]) sb.append(num + " ");
sb.append(j + "\n");
โ ๊ฒฝ๋ก ์ถ๋ ฅ์
- ์์ ๋์ i
- ๊ฒฝ์ ์ง๋ค
- ๋์ฐฉ ๋์ j
- ๊น์ง ๋ชจ๋ ํฌํจ
๐ ์ ๋ฆฌ
โ ํต์ฌ ํฌ์ธํธ
- Floyd-Warshall ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ O(N³)
- ๊ฒฝ๋ก ์ ์ฅ์ ์ค๊ฐ ๊ฒฝ์ ์ง๋ฅผ ๋ฆฌ์คํธ๋ก ๋์
- ๊ฒฝ๋ก ์ถ๋ ฅ์ด ํ์ํ ๋๋ ๋ฆฌ์คํธ๋ฅผ ์ง์ ๋ณต์ฌ + ์ฐ๊ฒฐ
'Algorithm & Data Structures > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
b4803. ํธ๋ฆฌ (0) | 2025.04.28 |
---|---|
b2263. ํธ๋ฆฌ์ ์ํ (0) | 2025.04.28 |
b13913. ์๊ฐ์ด๋ 4 (0) | 2025.04.22 |
b2618. ๊ฒฝ์ฐฐ์ฐจ (0) | 2025.04.18 |
b14003. ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด 5 (0) | 2025.04.16 |