본문 바로가기
알고리즘/트리

[백준][Python] 1967번 트리의 지름

by 임짠짠 2022. 10. 11.
반응형
 

1967번: 트리의 지름

파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연

www.acmicpc.net

 

 

코드

import sys
from collections import deque
def dfs(a,l):
	queue = deque()
	queue.append((a,l))
	while queue:
		a,l = queue.popleft()
		for na,nl in graph[a]:
			if distance[na] == -1:
				queue.append((na,nl))
				distance[na] = distance[a]+nl
	return distance.index(max(distance))  # a번 노드와 가장 멀리 떨어진 노드 번호 return

n = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(n-1):
	a,b,l = map(int,sys.stdin.readline().split())
	graph[a].append([b,l])
	graph[b].append([a,l])
distance = [-1]*(n+1)
distance[1] = 0
num = dfs(1,0)
distance = [-1]*(n+1)
distance[num] = 0
print(distance[dfs(num,0)])

 

설명

가장 긴 길이를 구하는 방법을 모르겠어서 검색을 해봤다.

- 먼저 dfs를 이용하여 1번 노드에서 가장 먼 노드 번호 num을 구한다.

- 다시 dfs를 이용하여 num번 노드에서 가장 먼 노드까지의 거리를 구하면 그 값이 트리의 지름이다.

 

반응형

댓글