알고리즘 문제 풀이/Python

python 백준 1167 트리의 지름

맛대 2022. 6. 25. 18:43

tree

  • input값을 이용하여 tree 구조 제작

dfs 활용

  • dfs를 활용하여 1번 점에서 가장 먼 점인 p1을 구함

  • p1점에서 가장 먼 점(p2)을 구하면 p1에서 p2까지의 거리가 트리의 지름

  • 이전 포스트(어제)에서 다른 풀이방법을 찾아봐서 쉽게 풀 수 있었다.

import sys
def make_tree():
    for _ in range(V):
        info = list(map(int, sys.stdin.readline().split()))
        p = info[0]
        i = 1
        end = len(info)//2
        while i < end:
            if info[2 * i - 1] == -1:
                break
            ch = info[2*i-1]
            v = info[2*i]
            tree[p][ch] = v
            i += 1

def find_point(s):
    stack = [(s,0)]
    point,long = 0,0
    visited = [0]*(V+1)
    visited[s] = 1
    while stack:
        now,length = stack.pop()
        for next,next_length in tree[now].items():
            if not visited[next]:
                visited[next] = 1
                stack.append((next,length+next_length))
            else:
                if long < length:
                    point = now
                    long = length
    return point,long

V = int(input())
tree = [{} for _ in range(V+1)]
make_tree()
p1 = find_point(1)[0]
p2 = find_point(p1)
print(p2[1])

'알고리즘 문제 풀이 > Python' 카테고리의 다른 글

python 2156 포도주 시식  (0) 2022.06.28
python 백준 11404 플로이드  (0) 2022.06.27
python 백준 1967 트리의 지름  (0) 2022.06.24
python 백준 1912 연속합  (0) 2022.06.23
python 백준 12865 평범한 배낭  (0) 2022.06.21