function solution(n, costs) {
costs.sort((a,b) => a[2] - b[2]);
let [from,to,answer] = costs.shift();
let connected = new Set([from,to]);
while(connected.size < n) {
let index = costs.findIndex(([from,to]) => (
connected.has(from) && !connected.has(to) ||
connected.has(to) && !connected.has(from)
));
let [[from,to,price]] = costs.splice(index,1);
connected.add(from).add(to);
answer += price;
}
return answer;
}
비용이 적게 드는 순으로 costs배열을 정렬한다.
처음 요소를 잘라내어 연결된 두 섬을 set에 저장.
모든 다리가 연결되었다면 set의 size는 n이 되기 때문에 반복문을 set의 size가 n이 되기 전까지 돌린다.
while 반복문.
먼저 costs를 하나씩 조사하면서 costs의 각 요소의 섬들 중 set에 하나만 저장되어있는 요소를 찾는다.(findIndex) 이미 비용순으로 정렬해뒀기 때문에 먼저 찾아지는 요소가 비용이 가장 적게 드는 연결방법이 된다.
다음으로 찾아낸 요소를 잘라내어 두 섬을 set에 저장하고 비용을 추가한다.
구조분해 할당 문법으로 배열형태의 요소의 각 index에 자유롭게 접근하는 방법을 다시 한번 상기하게 됐다.
splice로 요소를 잘라내면 [elem]를 반환한다.
shift() pop()등은 elem만 반환.
비용이 적게드는 순으로 다리를 연결하였을 때 반례가 있을 것만 같은 느낌이 들었는데 없다.