[알고리즘] 가장 먼 노드

2022. 8. 19. 17:44·알고리즘
반응형

문제 설명

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

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

제한사항

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

입출력 예


n edge return
6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3
입출력 예 설명

예제의 그래프를 표현하면 아래 그림과 같고, 1번 노드에서 가장 멀리 떨어진 노드는 4,5,6번 노드입니다.

나의 풀이

const n = 6;
const edge = [
  [3, 6],
  [4, 3],
  [3, 2],
  [1, 3],
  [1, 2],
  [2, 4],
  [5, 2],
  [1, 6],
];

function solution(n, edge) {
  const graph = Array.from(Array(n + 1), () => []);

  for (const [src, dest] of edge) {
    graph[src].push(dest);
    graph[dest].push(src);
  }

  const dist = Array(n + 1).fill(0);
  dist[1] = 1;

  const queue = [1];

  while (queue.length > 0) {
    const src = queue.shift();

    for (const dest of graph[src]) {
      if (dist[dest] === 0) {
        dist[dest] = dist[src] + 1;
        queue.push(dest);
      }
    }
  }

  const max = Math.max(...dist);
  return dist.filter((item) => item === max).length;
}

solution(n, edge);

BFS를 활용하여서 문제를 풀었다. 

 

먼저 그래프를 만들어 각 노드에 연결된 노드를 넣어준다. 

그리고 queue를 만들어서 시작 지점부터 연결된 노드들을 반복하고 거리를 dist에 넣어서 각 노드까지의 거리를 구한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] 소수 범위 구하기  (1) 2022.08.24
[알고리즘] 배달 - BFS를 다시 공부하고  (0) 2022.08.20
[알고리즘] 입국 심사  (0) 2022.08.18
[알고리즘] 자동 완성  (0) 2022.08.16
[알고리즘] 배상 비용 최소화  (2) 2022.08.14
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 소수 범위 구하기
  • [알고리즘] 배달 - BFS를 다시 공부하고
  • [알고리즘] 입국 심사
  • [알고리즘] 자동 완성
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    next.js
    프로그래머스
    네이버 부스트캠프
    javascript
    자바스크립트
    Docker
    ReactNative
    리얼클래스
    타일러영어
    바질
    타입스크립트
    영어회화
    다이소
    바질 키우기
    영어독학
    react
    알고리즘
    typescript
    webpack
    리얼학습일기
    ChatGPT
    덤프
    Node.js
    네트워크
    CSS
    CCNA
    redux
    식물
    Babel
    리액트
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] 가장 먼 노드
상단으로

티스토리툴바