public static boolean union(int x, int y) {
x = find(x); //x의 부모노드 찾기
y = find(y); //y의 부모노드 찾기
// 이미 같은 그래프에 속해있을 때 false 반환
if(x == y) return false;
if(x <= y) parent[y] = x;
else parent[x] = y;
return true;
}
public static int find(int x) {
if(parent[x] == x) return x;
return find(parent[x]);
}
Java
복사
import java.io.*;
import java.util.*;
class Solution {
static Integer[] parent;
public int solution(int n, int[][] computers) {
parent = new Integer[n];
for(int i = 0; i < n; i++) {
parent[i] = i;
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(i == j) continue;
if(computers[i][j] == 1) {
union(i, j);
System.out.println(Arrays.toString(parent));
}
}
}
// 갱신 안됐을수도 있으니 한번더
for(int i = 0; i < n; i++) {
parent[i] = find(i);
}
Set<Integer> set = new HashSet<>(Arrays.asList(parent));
return set.size();
}
public void union(int a, int b) {
a = find(a);
b = find(b);
if(a <= b) {
parent[b] = a;
} else {
parent[a] = b;
}
}
public int find(int a) {
if(a == parent[a]) return a;
return parent[a] = find(parent[a]);
}
}
Java
복사