말랑한 하루
[Programmers] 섬 연결하기 (Lv 3, JavaScript) 본문
반응형
[ 학습 내용 ]
최소치의 다리를 선택하면서 진행하되, 다리를 통해 연결되는 섬이 이미 연결되었는지를 판별해야한다.
처음 시도는, 단순하게 다리를 놓을 때 양 쪽 섬을 방문했었는지 판별했다.
그러나, 이는 서로 각각 연결된 두 그룹을 이을 때, 이미 모든섬이 방문했으므로 다리를 놓지 않아 마지막 연결에 실패한다.
다음 시도로, UnionFind를 활용하여 다리를 놓는 두 섬의 부모를 판단해 겹치는지 판단하는 것이다.
만약 겹친다면, 그 연결될 섬은 Cycle이 발생하고
겹치지 않는다면, 그 연결될 섬은 처음 연결되는 섬이므로 연결해준다.
여기서 그래프의 Cycle을 판단할 때, UnionFind가 가장 빠르고 편한방법인지 추후 확인하여 활용하려 한다.
[ 소스 코드 ]
function solution(n, costs) {
const unionFind = (n, parent) => {
if (parent[n] === n) return n;
return parent[n] = unionFind(parent[n], parent);
}
let answer = 0;
let parent = new Array(n).fill(0);
parent = parent.map((_, idx) => idx);
costs.sort((o1, o2) => o1[2] - o2[2]);
costs.forEach((cost, index) => {
let st = unionFind(cost[0], parent);
let ed = unionFind(cost[1], parent);
if (st !== ed) {
answer += cost[2];
parent[st] = ed;
}
})
return answer;
}
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Programmers] 가장 먼 노드 (Lv 3, JavaScript) (0) | 2022.12.17 |
---|---|
[Programmers] 여행경로 (Lv 3, JavaScript) (0) | 2022.12.16 |
[Programmers] 단속카메라 (Lv 3, JavaScript) (0) | 2022.12.10 |
[Programmers] 숫자 게임 (Lv 3, JavaScript) (0) | 2022.12.10 |
[Programmers] 최고의 집합 (Lv 3, JavaScript) (0) | 2022.12.09 |
Comments