[JavaScript][Programmers] 네트워크

조준형·2021년 7월 4일
0

Algorithm

목록 보기
13/142
post-thumbnail

🔎 네트워크

❓ 문제링크

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이 나온다.

profile
깃허브 : github.com/JuneHyung

0개의 댓글