문제풀이/최단경로
[Javascript/자바스크립트] 백준 14938번 서강그라운드
딜레이레이
2025. 5. 27. 18:17
https://www.acmicpc.net/problem/14938
코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const [n, m, r] = input[0]
.trim()
.split(" ")
.map((val) => +val);
const itemCount = input[1]
.trim()
.split(" ")
.map((val) => +val);
const roads = input.slice(2).map((val) =>
val
.trim()
.split(" ")
.map((val) => +val)
);
function solution2(n, m, r, itemCount, roads) {
const distance = Array.from(new Array(n + 1), () =>
new Array(n + 1).fill(Number.MAX_SAFE_INTEGER)
);
for (let i = 0; i <= n; i++) {
distance[i][i] = 0;
}
for (const [a, b, l] of roads) {
distance[a][b] = l;
distance[b][a] = l;
}
for (let k = 1; k <= n; k++) {
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (distance[i][j] > distance[i][k] + distance[k][j]) {
distance[i][j] = distance[i][k] + distance[k][j];
}
}
}
}
let answer = 0;
for (let i = 1; i <= n; i++) {
let itemsSum = 0;
for (let j = 1; j <= n; j++) {
if (distance[i][j] <= m) {
itemsSum += itemCount[j - 1];
}
}
answer = Math.max(answer, itemsSum);
}
return answer;
}
console.log(solution2(n, m, r, itemCount, roads));
각 점에서 다른 모든 점까지의 최단거리를 구해야 하는 문제였기에 플로이드 워셜 알고리즘을 사용했다.