문제출처: https://programmers.co.kr/learn/courses/30/lessons/49189
접근법
처음에는 1번 노드부터 dfs 알고리즘을 통해 확인하는 방법을 사용했으나 이는 처음 한번 최단거리를 확인한 노드들도 또 방문하는 비효율적인 알고리즘 선택이라는 것을 알게되었다.
( 7,8,9번 테스트케이스에서 시간초과 )
최단거리를 확인하는 알고리즘은 bfs 알고리즘이 적절하다.
1. 큐에 1번노드를 넣는다.
2. 큐에 헤드를 POP한 뒤 그 노드번호가 아직 방문하지 않는 노드들에 대한 간선이 존재한다면 큐에 푸쉬한다.
코드
from collections import defaultdict def solution(n, edge): answer = 0 d = defaultdict(list) for i,j in edge: d[i].append(j) d[j].append(i) v = defaultdict(int) a = defaultdict(int) q = [(1,0)] v[1] = 1 while( q ): cur,index = q.pop(0) a[cur] = index for n in d[cur]: if( v[n] == 0 ): v[n] = 1 q.append((n,index+1)) m = max( a.values() ) for i in a.values(): answer += 1 if(i==m) else 0 return answer