
-Code
import java.util.*;
class Solution {
static boolean[] visited;
public int solution(int n, int[][] computers) {
int answer = 0;
// visited
visited = new boolean[n + 1];
// 리스트로 셋팅
ArrayList<Set<Integer>> nodes = new ArrayList<>();
for (int i = 0; i <= n; i++) nodes.add(new HashSet<>());
// node 셋팅
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) continue;
if (computers[i][j] == 1) {
nodes.get(i + 1).add(j + 1);
nodes.get(j + 1).add(i + 1);
}
}
}
// 각 노드를 방문하면서 연결되어 있으면 방문 처리후 answer++
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
DFS(i, nodes);
answer++;
}
}
return answer;
}
// BFS 로직
private static void DFS(int now, ArrayList<Set<Integer>> nodes) {
// 현재 노드 방문 처리
visited[now] = true;
for (int nextNode : nodes.get(now)) {
// 방문안한 경우 탐색
if (!visited[nextNode]) {
// 방문 처리 및 탐색
visited[nextNode] = true;
DFS(nextNode, nodes);
}
}
}
}
로직을 보기 편하고 작정하기 쉽도록 입력받은 cumputers를 리스트로 변경하여 풀었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 11048번 이동하기 (0) | 2026.01.08 |
|---|---|
| [프로그래머스/Java] 단어 변환 (0) | 2026.01.08 |
| [프로그래머스/Java] 완주하지 못한 선수 (0) | 2026.01.08 |
| [백준/Java] 27982번 큐브 더미 (0) | 2026.01.08 |
| [백준/Java] 1463번 1로 만들기 (0) | 2026.01.07 |