Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- heapq
- 아파치 스파크
- Data Engineering
- 리트코드
- Apache Hadoop
- 데이터 엔지니어링
- 우선순위큐
- HDFS
- 티스토리챌린지
- 분산처리
- 오블완
- 이진탐색
- 딕셔너리
- 아파치 하둡
- 코딩테스트
- 도커
- Apache Spark
- 파이썬
- programmers
- 빅데이터
- Spark
- leetcode
- 분산
- docker
- Python
- 알고리즘
- 하둡
- 스파크
- 프로그래머스
- Hadoop
Archives
- Today
- Total
래원
[Programmers] 섬 연결하기 - Python 본문
난이도: Lv.3
문제 설명
개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요.
다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다.
제한 사항
- 섬의 개수 n은 1 이상 100 이하입니다.
- costs의 길이는 ((n-1) * n) / 2이하입니다.
- 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는 비용입니다.
- 같은 연결은 두 번 주어지지 않습니다. 또한 순서가 바뀌더라도 같은 연결로 봅니다. 즉 0과 1 사이를 연결하는 비용이 주어졌을 때, 1과 0의 비용이 주어지지 않습니다.
- 모든 섬 사이의 다리 건설 비용이 주어지지 않습니다. 이 경우, 두 섬 사이의 건설이 불가능한 것으로 봅니다.
- 연결할 수 없는 섬은 주어지지 않습니다.
입출력 예
n | costs | return |
4 | [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] | 4 |
입출력 예 설명
costs를 그림으로 표현하면 다음과 같으며, 이때 초록색 경로로 연결하는 것이 가장 적은 비용으로 모두를 통행할 수 있도록 만드는 방법입니다.
✏ Solution(솔루션)
def find(parent, x):
if parent[x] == x:
return x
parent[x] = find(parent, parent[x])
return parent[x]
def union(parent, a, b):
rootA = find(parent, a)
rootB = find(parent, b)
if rootA < rootB:
parent[rootB] = rootA
else:
parent[rootA] = rootB
def solution(n, costs):
parent = [0] * (n + 1)
edges = []
result = 0
for i in range(1, n + 1):
parent[i] = i
costs.sort(key = lambda x:x[2])
for cost in costs:
a, b, c = cost
if find(parent, a) != find(parent, b):
union(parent, a, b)
result += c
return result
실행 결과
코드 설명
이 문제는 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return하면 되는 문제였다.
예시 그림을 보고 바로 MST가 생각이 났다.
MST는 Minimum Spanning Tree의 약자로 최소 비용으로 만들 수 있는 신장 트리를 찾는 알고리즘이다.
대표적으로 Kruskal Algorithm이 있다.
따라서, Kruskal Algorithm이 모든 섬을 연결하면서 필요한 최소 비용을 찾기에 적합한 알고리즘이라 생각이 들었다.
생각이 들자마자 Kruskal Algorithm을 작성했고, 쉽게 정답을 맞출 수 있었다.
Kruskal Algorithm은 cost를 정렬을 시켜주어야하는데 첫 제출때 까먹고 정렬을 안시켜서 25점 밖에 맞지 못했다...
이런점은 주의가 필요해보인다..
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] 가장 먼 노드 (Python) (0) | 2024.12.08 |
---|---|
[Programmers] [PCCP 기출문제] 3번 / 충돌위험 찾기 - Python (1) | 2024.12.04 |
[Programmers] 도넛과 막대 그래프 - Python (1) | 2024.11.29 |
[Programmers] 베스트앨범 - Python (0) | 2024.11.26 |
[Programmers] 오픈채팅방 (0) | 2024.11.24 |