TIL/프로그래머스
[프로그래머스 level3 섬 연결하기] 크루스칼 알고리즘 활용하기
곰퓨타
2021. 10. 8. 19:43
해결해야하는 문제는 다음과 같았다.
https://programmers.co.kr/learn/courses/30/lessons/42861
코딩테스트 연습 - 섬 연결하기
4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4
programmers.co.kr
아이디어는 다음과 같다.
(이것은 코딩테스트다 파이썬편에서 공부하였었던 크루스칼 알고리즘을 적용한 것이다.)
아이디어를 바탕으로 작성한 코드는 다음과 같다.
def find_parent(parent,x):
if parent[x] != x:
parent[x] = find_parent(parent,parent[x])
return parent[x]
def union_parent(parent,a,b):
a = find_parent(parent,a)
b = find_parent(parent,b)
if a<b :
parent[b] = a
else :
parent[a] = b
def solution(n, costs):
answer = 0
parent = [i for i in range(n)]
costs.sort(key=lambda x : x[2])
for cost in costs :
a,b,c = cost
if find_parent(parent,a) != find_parent(parent,b) :
union_parent(parent,a,b)
answer += c
return answer