코딩테스트

[못풂/꼭 다시풀기/프로그래머스] 섬 연결하기

_서리__ 2023. 6. 10. 23:29
const getParent = (parent,x)=>{
    if(parent[x]===x) return x;
    return parent[x] = getParent(parent,parent[x])
}

const unionParent = (parent,x,y) => {
    const u1 = getParent(parent,x)
    const u2 = getParent(parent,y)
    if(u1<u2) parent[u2] = u1
    else parent[u1] = u2
}

const finedParent = (parent,x,y)=>{
    const u1 = getParent(parent,x)
    const u2 = getParent(parent,y)
    if(u1===u2) return true;
    else return false;
}

function solution(n, costs){
    let answer = 0;
    const parent = [];
    costs.sort((a,b)=>a[2]-b[2])
    for(let i=0;i<n;i++){
        parent.push(i);
    }
    costs.forEach((cost)=>{
        if(!finedParent(parent,cost[0],cost[1])){
            unionParent(parent,cost[0],cost[1])
            answer+=cost[2]
        }
    })

    return answer;
}

크루스칼 알고리즘과 합집합 찾기 알고리즘을 이용하여 풀 수 있는 문제였다. 꼭 다시 풀것,