[알고리즘] 가장 먼 노드-JavaScript

개발자재영·2021년 4월 8일
1

알고리즘

목록 보기
27/28
post-thumbnail

Algorithm Problem with JavaScript — 27day

Problem

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

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

제한사항

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

입출력 예

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

1. 문제 이해하기

n 의 노드가 주어지면 1번 노드에서 시작해서 가장 멀리 있는 노드들의 갯수를 반환하면 된다.

2. 해결 방법

edge 로 들어오는 배열을 인접리스트로 만들어 트리 구조로 활용하기 쉽게 한다.

인접리스트에 가중치 정보를 추가한다. 이 문제에서는 가중치가 따로 없기 때문에 모두 1로 통일해서 넣는다.

1번(루트, 시작 노드)로부터의 최소 거리를 담을 distances 배열을 만들고 탐색을 위해서 queue 배열을 만든다. distances 배열에는 임의 값 100000를 넣고queue 에는 [현재 노드, 현재 최소 거리] 를 넣는다. (100000은 임의 큰 수이다.) 처음에는 [1,0] 를 넣는다. 시작노드 1번, 최소거리 0(1번에서 1번까지의 최소거리)를 넣는다.

이후에는 queue를 이용해서 while 문을 돌면서 탐색한다. queue에서 하나씩 꺼내서 현재 노드와 현재 노드까지의 거리를 이용한다. distances 배열에 담긴 해당 노드의 최소거리와 currentDistance(현재노드까지의 거리)를 비교해서 더 작은 것을 distances에 업데이트 해준다.
업데이트를 했다면 해당노드와 연결된 노드를 queue에 넣어줘야 한다.
시간복잡도를 줄이기 위해서 연결된 노드가 유효한지 검사를 한 이후에 queue 추가한다.

이후에는 distances 를 이용해 최대 거리를 구하고 그 최대 거리를 가진 노드가 몇 개인지 파악해 정답으로 반환한다.

3. 코드 구현

4.결과 분석

profile
프론트엔드 개발자입니다.

0개의 댓글