문제 설명
입출력 예제
# 입력
5
1 3 2 -1
2 4 4 -1
3 1 2 4 3 -1
4 2 4 3 3 5 6 -1
5 4 6 -1
# 출력
11
풀이 코드
이전 포스팅한 백준 1967 트리의 지름 문제와 별 차이가 없습니다.
주어진 입력값으로 그래프를 초기화하는 방법만 다를 뿐입니다.
트리의 지름을 구하는 방법은 다음과 같습니다.
1. 시작 정점에서 임의의 정점까지의 거리를 구하여 가장 먼 거리를 구합니다.
2. 1에서 찾은 가장 먼 거리를 시작 지점으로 하여 다시 한번 가장 긴 거리를 찾습니다.
정답 코드 (DFS)
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 9)
V = int(input())
graph = [[] for _ in range(V + 1)]
for _ in range(V):
info = list(map(int, input().split()))
for n in range(1, len(info) - 2, 2):
graph[info[0]].append((info[n], info[n + 1])) # (연결노드, 거리)
def dfs(start, distance):
for next, next_d in graph[start]:
if visited[next] == -1:
visited[next] = distance + next_d
dfs(next, distance + next_d)
visited = [-1] * (V + 1)
visited[1] = 0
dfs(1, 0)
last_Node = visited.index(max(visited))
visited = [-1] * (V + 1)
visited[last_Node] = 0
dfs(last_Node, 0)
print(max(visited))
정답 코드 (BFS)
from collections import deque
import sys
input = sys.stdin.readline
V = int(input())
graph = [[] for _ in range(V + 1)]
for _ in range(V):
info = list(map(int, input().split()))
for n in range(1, len(info) - 2, 2):
graph[info[0]].append((info[n], info[n + 1])) # (연결노드, 거리)
def bfs(start):
visited = [-1] * (V + 1)
visited[start] = 0
q = deque()
q.append(start)
while q:
cur = q.popleft()
for next, next_d in graph[cur]:
if visited[next] == -1:
q.append(next)
visited[next] = visited[cur] + next_d
m = max(visited)
return [visited.index(m), m]
print(bfs(bfs(1)[0])[1])
반응형
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 9466 - 텀 프로젝트 (0) | 2023.05.18 |
---|---|
[Python/파이썬] 백준 1068 - 트리 (2) | 2023.05.18 |
[Python/파이썬] 백준 1967 - 트리의 지름 (DFS / BFS) (0) | 2023.05.17 |
[Java/자바] 프로그래머스 Lv2 - 소수 찾기 (완전탐색/DFS) (0) | 2023.02.09 |
[Java/자바] 프로그래머스 Lv2 - 피로도 (완전탐색/dfs) (0) | 2023.01.29 |