첫번째 코드
BFS에서 평소에 이용하던 visited만이 아닌 distance를 고려해서 구해야 한다.
그렇기 때문에 tuple로 노드와 가중치를 함께 저장해서 하나씩 풀어가는 형식으로 문제를 풀어야 한다!
책의 도움을...ㅎㅎ; 많이 받았지만 그래도 그만큼 BFS에 익숙해지는 거라고 생각하자!
import sys
input = sys.stdin.readline
from collections import deque
n = int(input())
A = [[] for _ in range(n+1)]
for _ in range(n):
data = list(map(int, input().split()))
index = 0
s = data[index]
index += 1
while True:
e = data[index]
if e == -1:
break
v = data[index + 1]
A[s].append((e, v))
index += 2
distance = [0] * (n+1)
visited = [False] * (n+1)
def BFS(x):
queue = deque()
queue.append(x)
visited[x] = True
while queue:
now = queue.popleft()
for i in A[now]:
if not visited[i[0]]:
visited[i[0]] = True
queue.append(i[0])
distance[i[0]] = distance[now] + i[1]
BFS(1)
Max = 1
for i in range(2, n+1):
if distance[Max] < distance[i]:
Max = i
distance = [0] * (n+1)
visited = [False] * (n+1)
BFS(Max)
print(max(distance))
통과!
그놈의 DFS, BFS;;
링크
programmers/백준/Gold/1167. 트리의 지름 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
029 수 찾기 (0) | 2024.05.21 |
---|---|
027 미로 탐색 (2) | 2024.05.16 |
025 ABCDE (0) | 2024.05.14 |
026 DFS와 BFS (0) | 2024.05.14 |
024 신기한 소수 (0) | 2024.05.09 |