코딩테스트
[릿코드/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;
};
프림 알고리즘을 이용해 풀어야 한다. 너무 어렵다,,