n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요.
다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다.
최소 신장 트리
costs
배열을 비용 오름차순으로 정렬한다.unionParent
를 해주고 비용을 결과 값에 더해준다.사이클 발생 확인하는 법 = 부모가 같은 지 확인
null
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int parent[100];
int findParent(int x) {
if(x == parent[x]) return x;
else return findParent(parent[x]);
}
void unionParent(int a, int b) {
a = findParent(a);
b = findParent(b);
if(a < b) parent[b] = a;
else parent[a] = b;
}
bool compare(vector<int> &a, vector<int> &b) {
return a[2] < b[2];
}
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
for(int i=0; i<n; ++i) {
parent[i] = i;
}
sort(costs.begin(), costs.end(), compare);
for(int i=0; i<costs.size(); ++i) {
int a = costs[i][0];
int b = costs[i][1];
int cost = costs[i][2];
if(findParent(a) != findParent(b)) {
answer += cost;
unionParent(a, b);
}
}
return answer;
}