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

최은우·2023년 7월 27일
0

Algorithms

목록 보기
9/14
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를 사용해줍시다.


풀이 과정

1. 먼저 0부터 n-1까지 탐색하며 방문 안했던 지점을 만나면 DFS를 시작해줍니다.

2. DFS를 시작하면 computers 배열에서 값이 1이면서 방문하지 않은 지점만 다시 push해주면서 진행해줍니다.

이때 저는

Array.forEach((item, idx) => );

이 문법을 사용하여 배열을 순회하였습니다.
'forEach'는 배열의 원소를 하나하나 순회하며 원하는 로직을 수행할 수 있게 하는 JavaScript Array Method입니다.

첫번째 입력변수인 'item'은 해당 원소 자체이며 두번째 입력변수인 'idx'는 그 원소의 배열에서의 인덱스를 뜻합니다.

따라서

(item === 1 && !visited[idx])

와 같은 if문 조건문을 통해 연결되어있는지, 방문한 적이 없는지 등을 확인하게 됩니다.

3. 마지막으로 if문이 끝날 때 마다 answer값을 1씩 늘려줍니다.

0개의 댓글