섬 연결하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 풀이
- 처음에 heap과 bfs를 써서 풀었음
- -> 이 문제는 목적지가 있는 것이 아니기 때문에 bfs가 될 수 없음
- MST( Minimum Spanning Tree ) : 최소 신장 트리
- 가장 낮은 가중치 값들로 간선이 이루어진 트리
- 낮은 간선부터 연결하는데, 두 섬을 연결함으로 인해 사이클이 발생하는지 확인해야함
- 사이클 확인 과정: union-find
- union 하는데 이미 두 섬의 부모가 같으면 사이클 발생
- 사이클이 발생하지 않는 선에서 낮은 가중치를 더해가면 최소신장트리가 구성됨
- 처음에 heap과 bfs를 써서 풀었음
def solution(n, costs):
def union(x,y):
a=find(x)
b=find(y)
if a==b:
return False #사이클 발생
if a<b:
root[b]=a
else:
root[a]=b
return True
def find(x):
if root[x]!=x:
root[x]=find(root[x])
return root[x]
root=[i for i in range(n)]
costs.sort(key=lambda x:x[2])
answer = 0
for cost in costs:
s,e,v=cost
if union(s,e): #사이클 발생안하면
answer+=v
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][스택] 할인 행사 (0) | 2024.06.20 |
|---|---|
| [프로그래머스] [원형 수열] [스택] 연속 부분 수열 합의 개수 (0) | 2024.06.20 |
| [프로그래머스][백트래킹][그리디] 광물 캐기 (0) | 2024.04.18 |
| [프로그래머스][조합] 후보키 (0) | 2024.03.09 |
| [프로그래머스][구현] 도넛과 막대 그래프 (0) | 2024.03.06 |