해설을 봐도 이해가 되지 않는 문제였다. 다들 코드 해설을 적을 때 간단하게만 적어서 그런가보다.
일단 이중 배열이기 때문에 각 배열을 모두 순회하면서 방문하지 않았으면 방문을 하는 코드이다.
단지 재귀함수를 사용해서 생각을 해봐야했을 뿐인 것 같다.
나의 기준에서 이해가 되지않는 부분은 주석을 해놓았다.
class Solution {
// 3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]]
int answer = 0;
boolean[] visited = new boolean[n]; // {false, false, false}
for (int i = 0; i < n; i++) {
if (!visited[i]) { // 방문하지 않았으면
dfs(computers, visited, i);
answer++;
}
}
return answer;
public void dfs(int[][] computers, boolean[] visited, int start) {
visited[start] = true; // 방문했다는 표시
// 배열안의 배열을 탐색 하는 코드
// [start][이 부분을 탐색]
// 방문하지 않았으면 방문 표시하기
for (int i = 0; i < computers.length; i++) {
if (computers[start][i] == 1 && !visited[i]) {
dfs(computers, visited, i);
}
}
}
}