
class Solution {
public int solution(int n, int[][] computers) {
int answer = 0;
boolean[] visited = new boolean[n];
for (int i = 0; i < n; i++) {
if (!visited[i]) {
dfs(i, visited, computers);
answer++;
}
}
return answer;
}
void dfs(int node, boolean[] visited, int[][] computers) {
visited[node] = true;
for (int i = 0; i < computers.length; i++) {
if (computers[node][i] == 1 && !visited[i]) {
dfs(i, visited, computers);
}
}
}
}
- DFS를 이용하여 인접한 노드를 방문하며 통신이 가능한 컴퓨터의 개수를 구합니다.
- 모든 컴퓨터에 대해 DFS 탐색을 실행합니다.
- 방문하지 않은 노드에 대해서만 DFS 탐색을 실행합니다.
- DFS 탐색을 마치면 통신이 가능한 컴퓨터 개수를 1 증가시킵니다.