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