반응형
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
해결 방법 : 그리디 Kruskal
- 최소 비용 신장 트리 문제이다.
- 그리디하게, 사이클을 만들지 않으면서 가장 작은 cost 간선을 추가
- 간선 개수가 n-1이면 종료
- 사이클 검사는 추가하려는 두 노드가 같은 그룹에 있는지 판단하면 된다.
def solution(n, costs):
answer, lines = 0, 0
costs.sort(key=lambda x:x[2]) # cost 오름차순 정렬
link = [i for i in range(n)] # 그룹 표시
for f, t, c in costs:
if link[f] != link[t]: # f와 t가 다른 그룹에 있을 경우
temp = link[t]
for i, l in enumerate(link): # 같은 그룹으로 동기화
if l == temp: link[i] = link[f]
answer += c
lines += 1
if lines == n - 1: break # 전체 라인이 n-1개이면 최소신장트리
return answer반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
| 백준 1010 : 다리 놓기 (0) | 2021.06.24 |
|---|---|
| 프로그래머스 : 예상 대진표 (0) | 2021.06.24 |
| 프로그래머스 : 기지국 설치 (0) | 2021.06.22 |
| 프로그래머스 : 2개 이하로 다른 비트 (0) | 2021.06.21 |
| 프로그래머스 : 쿼드압축 후 개수 세기 (0) | 2021.06.21 |