[Programmers] - 가장 먼 노드 (BFS)
문제
BFS에 익숙해지고 싶은 문제이다….
코드
import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
int answer = 0;
int max = 0;
Queue<Integer> q = new LinkedList<Integer>();
boolean[][] visited = new boolean[n+1][n+1];
int[] distance = new int[n+1];
for(int i=0;i<edge.length;i++){// 길 뚫기
visited[edge[i][0]][edge[i][1]] = true;
visited[edge[i][1]][edge[i][0]] = true;
}
q.offer(1);
while(!q.isEmpty()){
int value = q.poll();
for(int i=2;i<=n;i++){//1은 안해도되니 2부터
if(distance[i] == 0 && visited[value][i]){//길이 뚫려있고 거리0이면
distance[i] = distance[value] +1;// +1길이 이어주기
q.offer(i);//어차피 정렬 안해도 모두 for문으로 돌아본다.
}
}
}
for(int i=2;i<=n;i++){//최대값 구하기
max = Math.max(max, distance[i]);
}
for(int i=2;i<=n;i++)//최대값과 같으면
if(max == distance[i]) answer++;
return answer;
}
}
코드 설명
주석으로 모두 설명했다.
요약
- BFS에 자주 익숙해지자.