📖 오늘의 학습 키워드
그리디(크루스칼 알고리즘)
[섬 연결하기]
https://school.programmers.co.kr/learn/courses/30/lessons/42861
import java.util.*;
class Solution {
public int[] parents;
public int solution(int n, int[][] costs) {
int answer = 0;
parents = new int[n];
for(int i = 0; i < n; i++) {
parents[i] = i;
}
Arrays.sort(costs, (a, b) -> a[2] - b[2]);
for(int i = 0; i < costs.length; i++) {
if(union(costs[i][0], costs[i][1])){
answer += costs[i][2];
}
}
return answer;
}
public boolean union(int a, int b){
int aParent = find(a);
int bParent = find(b);
if(aParent == bParent) {
return false;
}
if(aParent < bParent) {
parents[bParent] = aParent;
}
else {
parents[aParent] = bParent;
}
return true;
}
public int find(int n) {
if(parents[n] == n) {
return n;
}
return parents[n] = find(parents[n]);
}
}
전에 Union-Find 알고리즘을 공부하면서 풀어보았던 백준의 전력난([백준] 6497 : 전력난) 문제가 떠올라서 어렵지 않게 풀 수 있었다.
오랜만에 크루스칼 알고리즘을 복습할 수 있었다.