알고리즘

[프로그래머스] 가장 먼 노드

유병각 2022. 2. 10. 01:54

 

문제풀이

처음에는 플로이드 와샬(O(n^3)) 을 사용했지만, 시간초과가 났다.

그 다음에는 다엑스트라(O(nlogn)) 을 사용했지만, 풀지 못했다.

그러다가 가장 쉽고 직관적인 BFS 를 사용해서 풀게되었다.

 

시간복잡도

O(n^2) 이하. (visited 에서 예외처리를 해주기 때문)

 

 

소스코드

from collections import deque
from collections import defaultdict;

def solution(n, edge):
    link = defaultdict(list);
    visited = [0] * (n+1);
    ret = [0] * (n+1);
    for a,b in edge:
        link[a].append(b);
        link[b].append(a);
    
    queue = deque();
    if link[1] == []:
        return 0;
    queue.append([1,0])
    visited[1] = 1;
    while queue:
        now, distance = queue.popleft();
        ret[now] = distance;
        for i in link[now]:
            if not visited[i]:
                visited[i] = 1;
                queue.append([i, distance+1]);
    
    maxV = max(ret);
    cnt = 0;
    for v in ret:
        if maxV == v:
            cnt += 1;
    return cnt;