[프로그래머스] 가장 먼 노드
https://school.programmers.co.kr/learn/courses/30/lessons/49189
ArrayList 배열
을 생성해 그래프를 만든다.양방향 그래프
로 만든다.BFS
를 사용해 각 노드와 1번 노드 사이의 최단 거리를 구한다.최단 거리 중 가장 먼 거리
를 BFS 탐색 중에 구한다.최단 거리 중 가장 먼 거리
와 같은 거리를 가진 노드의 수를 구한다.import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
int answer = 0;
// ArrayList 배열 선언 및 초기화
List<Integer>[] graph = new ArrayList[n + 1];
for (int i = 1; i <= n; i++) {
graph[i] = new ArrayList<Integer>();
}
// 간선 정보 입력
for (int[] info : edge) {
int s = info[0];
int e = info[1];
graph[s].add(e);
graph[e].add(s);
}
// BFS로 각 노드의 최단거리 구하기
Queue<Integer> que = new LinkedList<>();
int[] dist = new int[n + 1]; // 각 노드와 1번 노드의 최단거리 저장할 배열
boolean[] checked = new boolean[n + 1];
que.add(1);
checked[1] = true;
int far_dist = 0; // 가장 멀리 있는 노드의 거리 저장할 배열
while (!que.isEmpty()) {
int now = que.poll();
if (far_dist < dist[now]) {
far_dist = dist[now];
}
for (int nxt : graph[now]) {
if (checked[nxt]) continue;
que.add(nxt);
checked[nxt] = true;
dist[nxt] = dist[now] + 1;
}
}
// 가장 멀리 떨어진 거리와 같은 노드의 개수 구하기
for (int i = 2; i <= n; i++) {
if (dist[i] == far_dist) {
answer++;
}
}
return answer;
}
}