Algorithm Problem with JavaScript — 27day
n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.
노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.
제한사항
입출력 예
입출력 예 설명
예제의 그래프를 표현하면 아래 그림과 같고, 1번 노드에서 가장 멀리 떨어진 노드는 4,5,6번 노드입니다.
n
의 노드가 주어지면 1번 노드
에서 시작해서 가장 멀리 있는 노드들의 갯수를 반환하면 된다.
edge
로 들어오는 배열을 인접리스트로 만들어 트리 구조로 활용하기 쉽게 한다.
인접리스트에 가중치 정보를 추가한다. 이 문제에서는 가중치가 따로 없기 때문에 모두 1
로 통일해서 넣는다.
1번(루트, 시작 노드)로부터의 최소 거리를 담을 distances
배열을 만들고 탐색을 위해서 queue
배열을 만든다. distances
배열에는 임의 값 100000
를 넣고queue
에는 [현재 노드, 현재 최소 거리]
를 넣는다. (100000
은 임의 큰 수이다.) 처음에는 [1,0]
를 넣는다. 시작노드 1번, 최소거리 0(1번에서 1번까지의 최소거리)를 넣는다.
이후에는 queue
를 이용해서 while 문을 돌면서 탐색한다. queue
에서 하나씩 꺼내서 현재 노드와 현재 노드까지의 거리를 이용한다. distances
배열에 담긴 해당 노드의 최소거리와 currentDistance
(현재노드까지의 거리)를 비교해서 더 작은 것을 distances
에 업데이트 해준다.
업데이트를 했다면 해당노드와 연결된 노드를 queue
에 넣어줘야 한다.
시간복잡도를 줄이기 위해서 연결된 노드가 유효한지 검사를 한 이후에 queue
추가한다.
이후에는 distances
를 이용해 최대 거리를 구하고 그 최대 거리를 가진 노드가 몇 개인지 파악해 정답으로 반환한다.