오랜만에 문제를 푼건 아니었고 매일매일 풀고 있었는데 그래프 탐색 감을 잡기 위해 남의 풀이만 보고 공부하다가 처음 스스로 푼 문제이기 때문에 기록이 늦었다.
그래프가 주어지고 노드 1 부터 가장 먼 노드의 숫자를 카운팅 하는 것이다.
bfs로 레벨을 구하고 레벨 값이 가장 큰 값들을 count 하는 방식으로 코드를 작성했다.
평소 방법대로 풀이하니 메모리 초과 이슈가 발생했지만 인접 어레이를 int타입이 아닌 boolean 이차원 어레이로 타입을 변경하여 메모리 크기를 줄였다. 좀 치사한 것 같다.
import java.util.*;
class Solution {
static boolean[][] map;
static int[] visit;
static int max;
static int count;
public int solution(int n, int[][] edge) {
max =-1;
map = new boolean[n+1][n+1];
visit = new int[n+1];
Arrays.fill(visit,0);
for(int i=0;i<edge.length;i++){
int from = edge[i][0];
int to = edge[i][1];
map[from][to]=true;
map[to][from]=true;
}
Queue<Integer> q = new LinkedList<>();
q.add(1);
visit[1]=1;
while(!q.isEmpty()){
int tmp = q.poll();
for(int i=1;i<=n;i++){
if(map[tmp][i]&&visit[i]==0){
q.add(i);
visit[i]=visit[tmp]+1;
if(visit[i]>max){
count=1;
max=visit[i];
}else if(visit[i]==max){
count++;
}
}
}
}
return count;
}
}
```