728x90
1. 메인 메서드
public int solution(int n , int[][] costs){
int answer = 0;
//cost 오름차순 정렬
Arrays.sort(costs,(o1,o2 -> o1[2] - o2[2]);
//부모 노드 초기화
int[] parent = new int[n];
for(int i=0; i<parent.length; i++) {
parent[i] = i;
}
answer = kruskal(costs, parent);
return answer;
}
2. 크루스칼 메서드
public static int kruskal(int[][] costs, int[] parent){
int cost = 0;
for(int i = 0; i < costs.length; i++) {
//첫번째 섬과 두번째 섬의 부모가 다를 때
if(find(parent, costs[i][0]) != find(parent, costs[i][1])){
cost += costs[i][2];
union(parent, costs[i][0], costs[i][1]);
}
}
return cost;
}
3. x의 부모를 찾는 find 메서드
public static int find(int[] parent , int x){
if(parent[x] == x) return x;
else return find(parent, parent[x]);
}
4. x와 y그래프를 합치는 union 메서드
public static void union(int[] parent, int x, int y){
x = find(parent, x); //부모 노드 찾기?
y = find(parent, y);
if(x < y) parent[y] = x;
else parent[x] = y;
}
노드 번호가 작은 쪽이 부모가 되도록 한다.
최종 코드
import java.util.*;
class Solution {
public int solution(int n, int[][] costs){
int answer = 0;
//costs 의 비용 부분 기준으로 오름차순 정렬
Arrays.sort(costs, (o1,o2) -> o1[2] - o2[2]);
//부모 노드 초기화
int[] parent = new int[n+1];
for(int i=0; i < parent.length ; i++) {
parent[i] = i;
}
answer = kruskal(costs, parent);
return answer;
}
public static int kruskal(int[][] costs, int[] parent){
int cost = 0;
for(int i = 0; i < costs.length; i++) {
if(find(parent, costs[i][0]) != find(parent, costs[i][1])){
cost += costs[i][2];
union(parent, costs[i][0], costs[i][1]);
}
}
return cost;
}
public static int find(int[] parent, int x){
if(parent[x] == x) return x;
else return find(parent, parent[x]);
}
public static void union(int[] parent, int x, int y){
x = find(parent, x);
y = find(parent, y);
if( x<y ) parent[y] = x;
else parent[x] = y;
}
}
진짜 정리 잘했다고 느꼈던 참고한 블로그 :
[알고리즘/Java] 유니온 파인드(Union-Find) 알고리즘
✔ 목차 유니온 파인드란? 유니온 파인드 예시 유니온 파인드 구현 - Java 🔎 유니온 파인드란? 🔎 유니온 파인드 예시 💻 유니온 파인드 구현 - Java
velog.io
728x90
'CodingTest' 카테고리의 다른 글
프로그래머스 동적계획법(Dynamic Programming) N으로 표현 자바 (0) | 2025.03.05 |
---|---|
프로그래머스 코딩테스트 연습 탐욕법(Greedy) 단속카메라 JAVA (1) | 2025.03.05 |
프로그래머스 코딩테스트 연습 탐욕법 구명보트 JAVA (1) | 2025.03.04 |
탐욕법 조이스틱 자바 (0) | 2025.02.25 |
프로그래머스 탐욕법 체육복 자바 (1) | 2025.02.25 |
댓글