링크 : https://www.acmicpc.net/problem/1967
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
- 문제
- 소요시간: 35분 실패
- 설계하기(접근방법)
1. 입력받기
트리의 노드 수와
간선을 입력받는다
2. 구현하기
트리의 가중치, 누적 가중치까지는 잘 구현했다
하지만 그 이후로 어떻게 끝과 끝을 연결해야
트리의 가장 큰 지름을 보장할 수 있을지 몰랐다
서치를 해보니 한 노드에서
가장 깊은 곳을 기준으로
다른 깊은 곳을 찾아내면
그것이 트리의 지름을 보장한다고 한다
따라서 가장 깊은 노드의 index num을 찾고
또 다시 bfs를 탐색한다
3. 출력하기
2번째 bfs의 깊이를 출력한다
- 코드(출력)
from collections import deque
import sys
def bfs(start):
visited = [-1 for _ in range(n + 1)]
visited[start] = 0
q = deque()
q.append(start)
while q:
temp = q.popleft()
for child, weight in tree[temp]:
if visited[child] == -1:
visited[child] = visited[temp] + weight
q.append(child)
m = max(visited)
return [visited.index(m),m]
input = sys.stdin.readline
n = int(input())
tree = [[]for _ in range(n + 1)]
for _ in range(n - 1):
p , c , w = map(int, input().split())
tree[p].append([c,w])
tree[c].append([p,w])
print(bfs(bfs(1)[0])[1])
- 얻어갈 부분
1. 처음 노드의 개수 input을 n으로 받고 그 다음 간선을 또 n으로 받아서 IndexError가 났다. 변수 선언에 주의하자
'알고리즘(백준) > BFS & DFS' 카테고리의 다른 글
[알고리즘/BFS] 16234번 : 인구 이동 - python (0) | 2024.02.22 |
---|---|
[알고리즘/BFS & DFS] 11725번 : 트리의 부모 찾기 - python (0) | 2024.02.05 |
[알고리즘/BFS & DFS] 7576번 : 토마토 - python (1) | 2024.02.03 |
[알고리즘/BFS & DFS] 6593번 : 상범 빌딩 - python (0) | 2024.02.03 |
[알고리즘/BFS & DFS] 5014번 : 스타트링크 - python (0) | 2024.02.03 |