[Programmers] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (Java)
by ๋๋ถ๋
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ฌ ์ฐ๊ฒฐํ๊ธฐ
4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4
programmers.co.kr
์ด ๋ฌธ์ ๋ ๋ชจ๋ ์ฌ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์ํ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
Greedy์ Union Find๋ฅผ ์ ์ฉํ์ฌ ํธ๋ ๋ฌธ์ ์ธ๋ฐ, Union Find ๋ฌธ์ ๋ ์ ๋งค๋ฒ ํ์ด๊ฐ ๋ฐ๋ก ์๊ฐ์ด ์ ๋ ๊น์...? ๐๐
์๋ฌดํผ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ๋ฉด ๋ฉ๋๋ค! ๐๐
1. ๋น์ฉ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
2. Union Find ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ๋ชจ๋ ์ฌ ์ฐ๊ฒฐ (์ด๋ฏธ ์ฐ๊ฒฐ๋ ์ฌ์ ๋์ด๊ฐ!)
import java.util.*;
class Solution {
// ๋ถ๋ชจ ์ฐพ๊ธฐ
public static int find(int[] parent, int x) {
if(parent[x] == x) return x;
return parent[x] = find(parent, parent[x]);
}
public int solution(int n, int[][] costs) {
int answer = 0;
int costsLen = costs.length;
int[] parent = new int[n]; // ๋ถ๋ชจ ๋
ธ๋์ ๋ํด ๊ธฐ๋ก
// ๋น์ฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(costs, (int[] c1, int[] c2) -> c1[2] - c2[2]);
// ์ด๊ธฐ์ ๋ถ๋ชจ๋ ์๊ธฐ ์์ ์ผ๋ก ์ค์
for (int i = 0; i < n; i++) {
parent[i] = i;
}
// Union-Find ์๊ณ ๋ฆฌ์ฆ์ ์์ฉํด ๋ถ๋ชจ ์ฐพ๊ธฐ
for (int i = 0; i < costsLen; i++) {
int first = find(parent, costs[i][0]);
int second = find(parent, costs[i][1]);
if (first != second) { // ๋ ๋
ธ๋์ ๋ถ๋ชจ๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ => ์ฐ๊ฒฐ์ด ์๋ ์ํ
answer += costs[i][2];
parent[second] = first; // ์๋ก ๋ค๋ฅธ ๋ถ๋ชจ์ด๋ฏ๋ก ํฉ์ณ์ค
}
}
return answer;
}
}
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ํธํ ๋ฐฉ ๋ฐฐ์ (Java) (0) | 2022.04.22 |
---|---|
[Programmers] n์ง์ ๊ฒ์ (Java) (0) | 2021.06.26 |
[Programmers] ํ์ผ๋ช ์ ๋ ฌ (Java) (0) | 2021.05.05 |
[Programmers] ๊ตฌ๋ช ๋ณดํธ (Java) (0) | 2021.05.01 |
[Programmers] ๋ฉ๋ด ๋ฆฌ๋ด์ผ (Python) (0) | 2021.04.17 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋