https://programmers.co.kr/learn/courses/30/lessons/42861
최소 신장 트리(MST) 문제로 크루스칼 알고리즘 이용해서 풀었습니다.
function solution(n, costs) {
let answer = 0;
costs.sort((a, b) => a[2] - b[2]);
let parentArr = new Array(n).fill(0).map((_, idx) => idx);
costs.forEach((_, i) => {
const [from, to, dist] = costs[i];
// isSameNode : 부모 노드가 같은 지 체크
if (!isSameNode(parentArr, from, to)) {
answer += dist;
unionParent(parentArr, from, to);
}
});
console.log(answer);
return answer;
}
function unionParent(parentArr, a, b) {
a = getParent(parentArr, a);
b = getParent(parentArr, b);
if (a < b) parentArr[b] = a;
else parentArr[a] = b;
}
function getParent(parentArr, x) {
if (parentArr[x] === x) return x;
return (parentArr[x] = getParent(parentArr, parentArr[x]));
}
function isSameNode(parentArr, a, b) {
a = getParent(parentArr, a);
b = getParent(parentArr, b);
if (a === b) return true;
else return false;
}