첫번째 코드
최소 신장 트리 알고리즘을 이용한 문제이다.
코드는 책을 참고했다.
유니온 파인드와 최단 거리가 섞인 문제로 유니온 파인드에 대한 명확한 이해가 필요하다.
부모노드와 최단 거리를 함께 생각하는 문제로
개념을 이해하면 원리는 이해가 되지만
코드 작성하려고 손을 올리면 멈추게 되는 문제이다.
다음에 다시 풀어보아야 하는 문제이다.
혼자 모두 이해하고 적을 수 있다면 최소 신장 트리와 유니온 파인드를 모두 이해했다는 것이 아닐까
import sys
input = sys.stdin.readline
from queue import PriorityQueue
n, m = map(int, input().split())
queue = PriorityQueue()
parent = [0] * (n+1)
for i in range(n+1):
parent[i] = i
for _ in range(m):
s, e, w = map(int, input().split())
queue.put((w, s, e))
def find(a):
if a == parent[a]:
return a
else:
parent[a] = find(parent[a])
return parent[a]
def union(a, b):
a = find(a)
b = find(b)
if a != b:
parent[b] = a
useEdge = 0
result = 0
while useEdge < n-1:
w, s, e = queue.get()
if find(s) != find(e):
union(s, e)
result += w
useEdge += 1
print(result)
통과
개념을 바로바로 정리하고 이해하여 푸는게 훨씬 코드 이해에 편한 것 같다!
다음에 또 풀어보기!!
링크
programmers/백준/Gold/1197. 최소 스패닝 트리 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
065 다리 만들기 2 (미해결) (0) | 2024.07.23 |
---|---|
066 불우이웃돕기 (미해결) (0) | 2024.07.23 |
063 케빈 베이컨의 6단계 법칙 (0) | 2024.07.18 |
061 플로이드 (0) | 2024.07.16 |
062 경로 찾기 (0) | 2024.07.16 |