그림을 안보고 문제를 풀려고 했어서 이해하는데 괜한 시간을 허비했다.
사실 알고보면 정말 간단한 문제인데...
입출력 예
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개 맞네가 되었다.
풀이
우선 한번 지나간 길은 또 지나가지 말자는 차원에서 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
'프로그램 강좌' 카테고리의 다른 글
[프로그래머스]여행경로 - javascript (0) | 2021.12.04 |
---|---|
[프로그래머스]단어변환 - javascript (0) | 2021.12.03 |
[프로그래머스]타겟 넘버 - javascript (0) | 2021.12.01 |
Visual Studio 2019 설치 방법 (0) | 2021.11.30 |
[LeetCode]26. Remove Duplicates from Sorted Array (0) | 2021.11.25 |