https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정답 코드
그래프를 만들어서 각 숫자마다 bfs로 연결된 부분을 방문체크를 하고
0 ~ n-1 에서 bfs 메서드가 발동된 부분을 세어주면된다.
나는 이 방법보단 유니온파인드(분리집합)이 먼저 생각이 들었기 때문에
각 연결점을 union 해주고
부모노드를 저장하는 p 배열의 루트의 갯수(음수로 랭크를 관리)가 네트워크의 갯수가 된다.
import java.util.*;
class Solution {
int[] p;
public int solution(int n, int[][] computers) {
p = new int[n]; Arrays.fill(p, -1);
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);
}
}
}
int ans = 0;
for(int i=0; i<n; i++) {
if(p[i] < 0) {
ans++;
}
}
return ans;
}
public int find(int x) {
if(p[x] < 0) return x;
return p[x] = find(p[x]);
}
public void union(int x, int y) {
int u = find(x);
int v = find(y);
if(u == v) return;
if(p[u] > p[v]) {
int t = u;
u = v;
v = t;
}
if(p[u] == p[v]) p[u]--;
p[v] = u;
}
}

유니온 파인드 이론
유니온파인드 | 분리집합 | 디스조인트셋
유니온파인드 코드 예시 [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 네트워크https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스SW개발자를 위한 평가, 교육
mirrorpi.tistory.com
'알고리즘 & 자료구조 > BFS' 카테고리의 다른 글
| [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 게임 맵 최단거리 (0) | 2026.02.16 |
|---|