프로그래머스 네트워크 (JS)

c_yj·2023년 5월 10일
0

문제 설명

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.

컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.

제한사항

  • 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
  • 각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
  • i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
  • computer[i][i]는 항상 1입니다.

입출력 예

입출력 예 설명

예제 #1
아래와 같이 2개의 네트워크가 있습니다.

예제 #2
아래와 같이 1개의 네트워크가 있습니다.
![]
업로드중..

내풀이

function solution(n, computers) {
 
  const graph = Array.from(Array(n+1), () => []);
  // graph에 computers 배열에 0이 아닌 값들을 넣어준다
  for(let i=0; i<computers.length; i++){
    const temp = computers[i];
    for(let j=0; j<temp.length; j++){
      if(temp[j] !== 0){
        graph[i+1].push(j+1)
      }
    }
  } 
  // [ [], [ 1, 2 ], [ 1, 2 ], [ 3 ] ] 
  // 1번 네트워크는 1,2연결 2번도 1,2연결 3번은 따로
  
  // dfs방문처리 변수와 count 세는 변수
  const dfsVisited = Array(n+1).fill(false);
  let count = 0;

  // dfs 연결돼있는지 확인
  function dfs (node) {
    dfsVisited[node] = true;

    for(let newNode of graph[node]){
      if(!dfsVisited[newNode]){
        dfs(newNode)
      }
    }
  }

  // 네트워크 갯수확인 
  // 방문이 안돼있을떄 dfs 함수 실행 count++
  for(let i=1; i<=n; i++){
    if(!dfsVisited[i]){
      dfs(i)
      count++
    }
  }
  return count;
}

solution(3,	[[1, 1, 0], [1, 1, 0], [0, 0, 1]])
profile
FrontEnd Developer

0개의 댓글