코딩테스트

[릿코드/js] 1584. Min Cost to Connect All Points

_서리__ 2023. 9. 16. 23:36
var minCostConnectPoints = function(points) {
    const n = points.length;
    let minCost = 0;
    const visited = new Array(n).fill(false);
    const distances = new Array(n).fill(Infinity);

    distances[0] = 0; 

    for (let i = 0; i < n; i++) {
        let u = getMinDistanceVertex(visited, distances);
        visited[u] = true;
        minCost += distances[u];

        for (let v = 0; v < n; v++) {
            if (!visited[v]) {
                const dist = Math.abs(points[u][0] - points[v][0]) + Math.abs(points[u][1] - points[v][1]);
                //현재 위치 [u]에서부터 [v]까지의 거리. v를 돌면서 추가한다.
                distances[v] = Math.min(distances[v], dist);
                //Math.min을 해주는 이유는 현재 위치에서 연결할 필요가 없기 때문임. (하나로 연결만 하면 되기 때문)
            }
        }
    }

    return minCost;    
};

var getMinDistanceVertex = function(visited, distances) {
    let minDist = Infinity;
    let minVertex = -1;

    for (let i = 0; i < distances.length; i++) {
        if (!visited[i] && distances[i] < minDist) {
            minDist = distances[i];
            minVertex = i;
        }
    }

    return minVertex;
};

프림 알고리즘을 이용해 풀어야 한다. 너무 어렵다,,