๐Algorithm
๋ฐฑ์ค[node.js] > 14940๋ฒ ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ
devWarrior
2024. 12. 30. 21:38
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/14940
๋ฌธ์ ํ์ด
๋๋น์ฐ์ ํ์์ผ๋ก ์์์ ์ผ๋ก ๋ถํฐ ๋์๋จ๋ถ์ผ๋ก ํ์ํ๋ฉด์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํ์๋ค.
๋ฌด๋ฆฌ์์ด ํ ์ ์์๋ค.
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let [N, M] = input
.shift()
.split(" ")
.map((n) => Number(n));
let s_row = undefined,
s_column = undefined;
let map = [];
for (let i = 0; i < input.length; ++i) {
let line = input[i].split(" ").map((n) => Number(n));
line.forEach((v, column) => {
if (v === 2) {
s_row = i;
s_column = column;
}
});
map.push(line);
}
let answer = Array.from({ length: N }, () => {
return Array(M).fill(Infinity);
});
answer[s_row][s_column] = 0;
let nextPoint = [[s_row, s_column]];
// ๋๋น์ฐ์ ํ์
while (nextPoint.length) {
let [now_r, now_c] = nextPoint.shift();
let now_distance = answer[now_r][now_c];
// ๋์๋จ๋ถ
let dr = [0, 0, 1, -1];
let dc = [1, -1, 0, 0];
for (let i = 0; i < 4; ++i) {
let nextRow = now_r + dr[i];
let nextColumn = now_c + dc[i];
if (map[nextRow] && map[nextRow][nextColumn] === 1 && now_distance + 1 < answer[nextRow][nextColumn]) {
answer[nextRow][nextColumn] = now_distance + 1;
nextPoint.push([nextRow, nextColumn]);
}
}
}
// ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํ์ง ๋ชปํ ๊ณณ์ ์ ์ด์ ๋๋ฌํ ์ ์๋ ๊ณณ(0)๊ณผ ๊ฐ์์๋ ๊ณณ(1)๋ก ๊ตฌ๋ถํ์ฌ
// ๊ฐ์ ์๋ ๊ณณ์ -1 ๊ฐ์ง ๋ชปํ๋ ๊ณณ์ 0 ์ผ๋ก ์นํ
answer.forEach((line, row) => {
line.forEach((distance, column) => {
if (distance === Infinity) {
if (map[row][column] === 0) {
answer[row][column] = 0;
} else if (map[row][column] === 1) {
answer[row][column] = -1;
}
}
});
});
let str = "";
answer.forEach((row) => {
str = str + row.join(" ") + "\n";
});
console.log(str.trim());