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;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 가장 먼 노드 (JAVA) (0) | 2022.06.24 |
---|---|
프로그래머스 [3차] 압축 (JAVA) (0) | 2022.06.23 |
프로그래머스 입국심사 (JAVA) (0) | 2022.06.21 |
프로그래머스 하노이의 탑(JAVA) (0) | 2022.06.20 |
프로그래머스 숫자의 표현 (JAVA) (0) | 2022.06.19 |