개발일기
프로그래머스 - 섬연결하기 본문
위에 그림 처럼 구조가 될 것이다. paraent배열에 들어있는건 부모 노드의 번호가 된다. 이 기준으로 find를 한다면 부모 노드를 통해서 구해지기에 이걸 통해서 비교를 해주고 이미 지나간 것은 동일하기에 최소 값을 기준으로 구할 수 있다.
해당 문제는 신장트리 , 크루스칼 알고리즘 , 유니온 - 파인드 알고리즘을 통해서 구했다.
import java.util.*;
class Solution {
private int[] parent;
public int find(int a) {
if(parent[a]==a) return a;
else return parent[a] = find(parent[a]);
}
public void union(int a, int b) {
a = find(a);
b = find(b);
if(a != b) {
parent[b] = a;
}
}
public int solution(int n, int[][] costs) {
int answer = 0;
parent = new int[n];
for(int i=0; i<n; i++) {
parent[i] = i;
}
Arrays.sort(costs, (o1, o2) -> o1[2] - o2[2]);
for(int i=0; i< costs.length; i++) {
if(find(costs[i][0]) != find(costs[i][1])) {
union(costs[i][0], costs[i][1]);
answer += costs[i][2];
}
}
return answer;
}
}
'Algorithm' 카테고리의 다른 글
[Programmers] 삼각 달팽이 자바 (0) | 2024.12.19 |
---|---|
프로그래머스 - 보석 쇼핑 (0) | 2024.12.02 |
프로그래머스 호텔 방 배정 (0) | 2024.12.02 |
주식가격 - 프로그래머스 Level2 JAVA (2) | 2024.10.21 |
괄호 회전하기 프로그래머스 - JAVA (2) | 2024.10.21 |