목차

트리 트리오 중간값

ps
링크programmers.co.kr/…
출처프로그래머스
문제 번호68937
문제명트리 트리오 중간값
레벨Level 4
분류

그래프, 트리

시간복잡도O(n)
인풋사이즈n<=250,000
사용한 언어Python
해결날짜2021/01/16

풀이

코드

"""Solution code for "Programmers 68937. 트리 트리오 중간값".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/68937
- Solution link: http://www.teferi.net/ps/problems/programmers/68937
"""

import operator
from teflib import tgraph


def solution(n, edges):
    graph = [set() for _ in range(n)]
    for u, v in edges:
        graph[u - 1].add(v - 1)
        graph[v - 1].add(u - 1)

    dists = tgraph.min_distances(graph, 0)
    v1 = max(enumerate(dists), key=operator.itemgetter(1))[0]
    dists_from_v1 = tgraph.min_distances(graph, v1)
    diameter = max(dists_from_v1)
    v2 = [u for u, dist in enumerate(dists_from_v1) if dist == diameter]
    if len(v2) > 1 or tgraph.min_distances(graph, v2[0]).count(diameter) > 1:
        return diameter
    return diameter - 1