https://school.programmers.co.kr/learn/courses/30/lessons/42861
Level 3
n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요.
다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다.
제한사항
import java.util.*;
class Solution {
static int[] parent;
public int solution(int n, int[][] costs) {
Arrays.sort(costs, ((o1, o2) -> (o1[2] - o2[2])));
parent = new int[n];
for(int i = 0; i < n; i++){
parent[i] = i;
}
int answer = 0;
for(int[] c : costs){
if(find(c[0]) != find(c[1])){
union(c[0], c[1]);
answer += c[2];
}
}
return answer;
}
public int find(int x){
if(parent[x] == x){
return x;
}else{
return find(parent[x]);
}
}
public void union(int x, int y){
int a = find(x);
int b = find(y);
if(a > b){
parent[a] = b;
}else{
parent[b] = a;
}
}
}
