[크루스칼 알고리즘]
[문제 해결 방법]
// 비용 작은 순서대로 정렬
costs.sort((a,b)=>a[2]-b[2]);
//Union-Find
//부모가 자기자신을 가르키도록 초기화
for(let i =0; i<parent.length; i++){
parent[i] = i;
}
//부모가 누구인지 찾기
const getParent = (x)=>{
if(parent[x] === x) return x;
return getParent(parent[x]);
}
//연결지었다면 부모를 통일시켜주기(단, 작은 수로)
const unionParent = (a,b)=>{
a = getParent(a);
b = getParent(b);
if(a>b) parent[a] = b;
else parent[b] = a;
}
//각 노드의 부모를 찾기
const findParent = (a,b) =>{
a = getParent(a);
b = getParent(b);
if(a===b) return 1;
else return 0;
}
costs.map((e)=>{
if(!findParent(e[0], e[1])){
unionParent(e[0],e[1]);
cost += e[2];
}
})
블로그에 정리된 크루스칼-유니온파인드를 읽었을 때 이해가 안된다면 유튜브에 나동빈님의 이론 설명 영상을 듣는 것을 강력 추천합니다~!!!!!