본문 바로가기

프로그램 강좌

[프로그래머스]네트워크 javascript

그림을 안보고 문제를 풀려고 했어서 이해하는데 괜한 시간을 허비했다.
사실 알고보면 정말 간단한 문제인데...

입출력 예

n computers return(answer)
3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 1
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 2

왜 이게 1개야, 이건 왜 2개야 로 한참 헤맸다. 그림 보자마자 아...
1개 맞네, 2개 맞네가 되었다.

전부 연결됐으니 네트워크 1개 / 1개는 끊어졌으니 네트워크 2개

풀이

우선 한번 지나간 길은 또 지나가지 말자는 차원에서 ch 배열을 만들었고, 모두 0(false)로 정했다.
그리고 맨 아래 for문으로 해당 영역이 지나간적 없는지 확인하고, DFS를 실행시킨다.

DFS가 실행되면 해당 영역은 check 하고(1로 변환), 연결된 경로가 있는지 확인한다.
만약 있다면 다시 DFS 실행.
연결이 안되어 있어 false라고 한다면 DFS 탈출, 그리고 answer에 카운트
for문이 끝날때까지 반복한다.

function solution(n, computers) {
    var answer = 0;
    let ch = Array.from({length:n}, ()=>0);

    function DFS(L){
        ch[L]=1;

        for(let i=0;i<n;i++){
            if(computers[L][i]===1 && !ch[i]){
                DFS(i);
            }
        }
    }

    for(let i=0;i<n;i++){
        if(!ch[i]){
            DFS(i);
            answer++;
        }
    }

    return answer;
}

728x90