알고리즘
프로그래머스 섬 연결하기 (JAVA)
박카스마시며코딩
2022. 6. 22. 20:56
https://programmers.co.kr/learn/courses/30/lessons/42861
코딩테스트 연습 - 섬 연결하기
4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4
programmers.co.kr
저는 해당 문제를 크루스칼을 통해서 문제를 해결하였습니다.
크루스칼을 통해 MST를 구성하면서 가장 작은 가중치의 합을 구하였습니다.
import java.util.*;
class Solution {
public int solution(int n, int[][] costs) {
int answer = kruskal(n,costs);
return answer;
}
private int findSet(int now, int[] parent){
if(now == parent[now]){
return now;
}
return parent[now] = findSet(parent[now], parent);
}
private boolean unionSet(int a,int b,int[] parent){
int aParent = findSet(a, parent);
int bParent = findSet(b, parent);
if(aParent == bParent){
return false;
}
parent[aParent] = bParent;
return true;
}
private int kruskal(int n, int[][] costs){
int[] parent = new int[n];
for(int i = 0 ; i < n ; i++){
parent[i] = i;
}
Arrays.sort(costs,(o1,o2)->{
return o1[2] - o2[2];
});
int result = 0;
for(int[] edge : costs){
if(unionSet(edge[0],edge[1],parent)){
result += edge[2];
}
}
return result;
}
}