프로그래머스

프로그래머스 가장 먼 노드 파이썬

hotchya 2021. 9. 17. 15:45

가장 먼 노드

https://programmers.co.kr/learn/courses/30/lessons/49189

문제 단순화

  • 노드가 갯수 n, 간선 정보 vertex가 있다.
  • 1번 노드부터 다른 노드까지 최단 경로로 이동했을 때, 가장 멀리 떨어진 노드의 개수를 리턴한다.

문제풀이

  • 간선 정보 이용하여, 각 노드에 연결된 노드들을 정의한다.
  • 1번 노드부터 BFS 탐색을 진행한다.
  • 탐색을 진행할 때, 1번 노드부터로의 거리를 같이 저장한다.
  • 새로운 노드를 발견할 때, 부모노드의 거리에 1을 더하여 저장한다.
  • 저장한 거리의 최댓값의 개수를 리턴한다.

코드

from collections import deque

def solution(n, edge):
    answer = 0

    nodes = [[] for _ in range(n+1)]
    for e in edge:
        nodes[e[0]].append(e[1])
        nodes[e[1]].append(e[0])

    dist_list = []

    dq = deque([(1,0)])
    visited = [False for _ in range(n+1)]
    visited[1] = True

    while dq:
        idx, dist = dq.popleft()
        for node in nodes[idx]:
            if not visited[node]:
                visited[node] = True
                dq.append((node,dist+1))
                dist_list.append(dist+1)

    answer = dist_list.count(max(dist_list))

    return answer