https://programmers.co.kr/learn/courses/30/lessons/43162
function solution(n, computers) {
var answer = 0;
let visited = new Array(n).fill(false);
for (let i = 0; i < computers.length; i++) {
if (!visited[i]) {
dfs(computers, i, visited)
answer++;
}
}
return answer;
}
// 연결된거 true하기.
function dfs(com, idx, v) {
v[idx] = true;
for (let i = 0; i < com.length; i++) {
if (com[idx][i]==1 && !v[i]) {
dfs(com, i, v);
}
}
}
computer배열, idx, 방문배열visited 를 가지고 dfs를 돈다.
처음 visited를 Array.fill을 이용하여 false로 모두 초기화시키고,
visited가 false인경우 dfs를 돌고, answer을 +함.
dfs에서는 시작할때 방문체크를하고, com만큼 돌면서 값이 1이고(연결되있고), v가 false인경우 한번 더 dfs를 돈다.
Test case1
[[1, 1, 0], [1, 1, 0], [0, 0, 1]] 의 경우
i=0일때는 visited = [f,f,f]로 dfs를 시작해, [t, f, f] , [t, t, f]로 끝나고, answer++;
i=1일때는 이미 v[i]가 True라서, 그냥 넘어감.
i=2일때는 visited=[t,t,f]로 시작해 [t,t,t]로 끝나고, answer++.
그래서 2가 나온다.
Test case2
[[1, 1, 0], [1, 1, 1], [0, 1, 1]] 의 경우
i=0일 때 visited=[f,f,f]로 시작해 [t,f,f] , [t,t,f] , [t,t,t]로 끝나고, answer++;
그 다음의 경우들은 모두 True로 바뀌어 넘어감.
그래서 1이 나온다.