(:30)
가장 멀리 떨어진 노드란 "최단경로"로 이동했을 때 간선의 개수가 가장 많은 노드들
문제에서는 “1번 노드로부터 가장 멀리떨어진 노드” 가 몇 개 인지 구하라고 하고 있다.
처음에는 특정한 출발점(1번노드)로부터, 모든 노드까지의 최단 거리를 업데이트 해 나가는 디익스트라 기법이 생각났다. 하지만 이 문제는 가중치 그래프가 아니었고, “경로의 길이” 는 “단순히 거쳐간 간선의 개수” 였기 때문에 다른 방법을 쓸 수 있을 것 같았다.
import java.util.*;
class Solution {
public boolean[] visit = new boolean[20000];
public ArrayList<Integer>[] graph = new ArrayList[20000];
public int max =0, maxCnt =0;
public int solution(int n, int[][] edge) {
int answer = 0;
// init graph
for(int i=0;i<n;i++){
graph[i] = new ArrayList<>();
}
// 양방향
for(int[] e:edge){
graph[e[0]-1].add(e[1]-1);
graph[e[1]-1].add(e[0]-1);
}
bfs();
answer = maxCnt;
return answer;
}
public void bfs(){
// q 생성
LinkedList<int[]> q = new LinkedList<>();
int[] cur = null;
q.add(new int[]{0,0});
visit[0] = true;
while(!q.isEmpty()){
cur = q.poll();
// update max
if(cur[0] == max){
maxCnt++;
}else if( cur[0] > max){
max = cur[0];
maxCnt = 1;
}
// 현재 노드cur[1] 의 인접 노드 정보들
for(Integer adj:graph[cur[1]]){
// 이미 다녀간곳은 패쓰
if(visit[adj])continue;
q.add(new int[]{cur[0]+1,adj});
visit[adj] = true;
}
}
}
}