[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/42861
[풀이]
모든 섬을 서로 연결하는 최소의 비용을 구하는 문제이므로 최소 신장 트리 MST를 구하는 크루스칼 알고리즘을 이용하여 풀었다.
[코드]
import java.util.*;
class Solution {
int[] parent;
public int solution(int n, int[][] costs) {
int answer = 0;
//최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return
//그래프
//cost 오름차순 정렬
Arrays.sort(costs, (int[] c1, int[] c2) -> c1[2]-c2[2]);
parent = new int[n];
for(int i=0; i<n; i++){
parent[i] = i;
}
for(int[] c:costs){
int s = c[0];
int e = c[1];
int cost = c[2];
if(union_node(s, e)){
answer += cost;
}
}
return answer;
}
public int find(int u){
if(parent[u]==u) return u;
return parent[u] = find(parent[u]);
}
public boolean union_node(int u, int v){
u = find(u);
v = find(v);
if(u==v) return false; //사이클 생김
else{
parent[u] = v;
return true;
}
}
class Node{
int n, cost;
Node(int n, int cost){
this.n = n;
this.cost = cost;
}
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level3 60063 블록 이동하기 (Java) - BFS, 시뮬레이션 (0) | 2023.01.20 |
---|---|
[pro] 프로그래머스 level3 42892 길 찾기 게임 (Java) - 이진트리 (0) | 2023.01.20 |
[pro] 프로그래머스 level3 42884 단속카메라 (Java) - 그리디 (0) | 2023.01.18 |
[pro] 프로그래머스 level3 42895 N으로 표현 (Java) - dp (0) | 2023.01.18 |
[pro] 프로그래머스 level3 72415 카드 짝 맞추기 (Java) - BFS, DFS (0) | 2023.01.17 |