프로그래머스[Level 3] 가장 먼 노드

bkboy·2022년 5월 9일
0

문제

n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.

노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • 노드의 개수 n은 2 이상 20,000 이하입니다.
  • 간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다.
  • vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다.

입출력 예

풀이

function solution(n, edge) {
  let graph = Array.from(Array(n + 1), () => []);
  for (let [a, b] of edge) {
    graph[a].push(b);
    graph[b].push(a); // 무방향 그래프
  }
  let dis = new Array(n + 1).fill(0);
  let visited = new Array(n + 1).fill(0);
  visited[1] = 1;
  let queue = [1];

  while (queue.length) {
    let cur = queue.shift();
    for (let next of graph[cur]) {
      if (!visited[next]) {
        visited[next] = 1;
        queue.push(next);
        dis[next] = dis[cur] + 1;
      }
    }
  }
  let max = Math.max(...dis);
  return dis.filter((e) => e === max).length;
}
  • 인접 리스트를 만드는 형태를 기억해두자
  • dis배열은 거리 즉 depth를 저장하는 배열이다 1씩 더해나간다.
  • while문은 BFS의 전형적인 패턴이다.
profile
음악하는 개발자

0개의 댓글