function solution(n, computers) {
const visited = Array(n).fill(0);
let answer = 0;
for (let i = 0; i < n; i++) {
if (!visited[i]) {
let q = [i];
visited[i] = 1;
while (q.length) {
let nx = q.pop();
computers[nx].forEach((item, idx) => {
if (item === 1 && !visited[idx]) {
visited[idx] = 1;
q.push(idx);
}
})
}
answer++;
}
}
return answer;
}
인접한 것을 탐색해 나가거나 그룹을 세는 것은 항상 DFS 또는 BFS로 컴퓨터에게 모든 작업을 맡기는 것이 가장 간단합니다.
물론 어떤 문제는 더 깊게 고민하면 더 빠른 풀이가 있을 수 있습니다.
JavaScript로 알고리즘 문제를 풀 때는 deque는 구현하여 사용해야 하므로 가능할 때에는 DFS를 사용해줍시다.
이때 저는
Array.forEach((item, idx) => );
이 문법을 사용하여 배열을 순회하였습니다.
'forEach'는 배열의 원소를 하나하나 순회하며 원하는 로직을 수행할 수 있게 하는 JavaScript Array Method입니다.
첫번째 입력변수인 'item'은 해당 원소 자체이며 두번째 입력변수인 'idx'는 그 원소의 배열에서의 인덱스를 뜻합니다.
따라서
(item === 1 && !visited[idx])
와 같은 if문 조건문을 통해 연결되어있는지, 방문한 적이 없는지 등을 확인하게 됩니다.