https://school.programmers.co.kr/learn/courses/30/lessons/42861
n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요.
다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다.
예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다.
최소 신장 트리를 만드는 문제다.
가장 작은 간선을 택해 트리를 만들어 프림 알고리즘을 선택
가중치순으로 오름차순 정렬2,3,4,5번 틀림def solution(n, costs):
answer = 0
# 프림 알고리즘
costs.sort(key = lambda x: x[2])
visited = [False]*n # 방문함?
for edge in costs :
a,b,c = edge
if visited[a]==False or visited[b] == False:
visited[a] = True
visited[b] = True
answer += c
return answer
정석으로 union-find를 활용함
def solution(n, costs):
answer = 0
costs.sort(key = lambda x : x[2])
# 프림 알고리즘
parent = [0]*(n+1)
for i in range(1, n+1):
parent[i] = i
def find(x):
if parent[x] == x:
return x
else :
parent[x] = find(parent[x])
return parent[x]
def union(a,b):
x = find(a)
y = find(b)
if x != y:
parent[x] = y
for edge in costs :
a,b,c = edge
if find(a) != find( b):
union( a, b)
answer += c
return answer