프로그래머스(탐욕법) - 섬 연결하기
해당 문제를 봤을때 제한사항으로 costs의 길이가 있기에, 한 좌표에서 각 좌표까지의 path costs를 구해 각 좌표별 최소 path를 구한 후 set에 다리를 연결 하는 방식으로 진행하려고 했습니다. 정상적으로 풀지 못해, 결국 인터넷 검색의 힘을 구했고, 해당 문제가 최소신장트리(MST), Kruskal(크루스칼) 알고리즘 과 관련된 문제라는 것을 알 수 있었습니다.
public int solution(int n, int[][] costs) {
int answer = 0;
int[] parent = new int[n];
PriorityQueue<int[]> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o[2]));
for (int i = 0; i < n; i++) {
parent[i] = i;
}
for (int i = 0; i < costs.length; i++) {
priorityQueue.add(costs[i]);
}
while (!priorityQueue.isEmpty()) {
int[] info = priorityQueue.poll();
if (findParent(info[0], parent) != findParent(info[1], parent)) {
parent = union(info, parent);
answer += info[2];
}
}
return answer;
}
public int[] union(int[] info, int[] parent) {
int startParent = findParent(info[0], parent);
int endParent = findParent(info[1], parent);
if (startParent < endParent) {
parent[endParent] = startParent;
} else {
parent[startParent] = endParent;
}
return parent;
}
public int findParent(int position, int[] parent) {
if (parent[position] == position) {
return position;
}
return findParent(parent[position], parent);
}
'정리 > 알고리즘' 카테고리의 다른 글
DP - N으로 표현 (0) | 2022.03.04 |
---|---|
탐욕법 - 단속카메라 (0) | 2022.03.03 |
탐욕법 - 구명보트 (0) | 2022.03.01 |
탐욕법 - 큰 수 만들기 (0) | 2022.02.23 |
완전탐색 - 카펫 (0) | 2022.02.21 |
댓글