Algorithm
- ν λ§ν -
λ¬Έμ
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μ λͺ¨μ μμμ μΉΈμ νλμ© λ£μ΄μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ λ€ λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§, κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ μΆλ ₯ μμ
λ¬Έμ νκΈ°
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
let arrNum = "";
let graph = [];
let visited = [];
let dx = [0, 0, -1, 1];
let dy = [-1, 1, 0, 0];
let toalCount = 0; // λͺ¨λ μΉΈμ κ°μ
let currCount = 0; // λ°©λ¬Έν μΉΈμ κ°μ
let tomatoCount = []; // μ΅μ ν λ§ν μμΉ
let minDay = 1;
let index = 0;
rl.on("line", function (line) {
if (!arrNum) arrNum = line.toString();
else input.push(line.toString());
}).on("close", function () {
arrNum = arrNum.split(" ").map((el) => Number(el));
graph = input.map((el) => el.split(" ").map((el) => Number(el)));
visited = Array.from(Array(arrNum[1]), () => Array(arrNum[0]).fill(false));
toalCount = arrNum[0] * arrNum[1];
graph.forEach((el1, idx1) =>
el1.forEach((el2, idx2) => {
if (el2 === 1) {
visited[idx1][idx2] = true;
currCount++;
tomatoCount.push([idx1, idx2]);
}
})
);
BFS();
if (currCount < toalCount) {
let result = findFalse();
if (result === true) console.log(minDay - 1);
else console.log(-1);
} else console.log(minDay - 1);
process.exit();
});
let BFS = () => {
while (true) {
let shiftQ = tomatoCount[index++];
if(!shiftQ) break;
let [x, y] = [shiftQ[0], shiftQ[1]];
for (let i = 0; i < 4; i++) {
let nx = x + dx[i];
let ny = y + dy[i];
// λ°©λ¬Έν μ μ΄ μκ³ 0μ΄ μλλΌλ©΄
if (0 <= nx && nx < arrNum[1] && 0 <= ny && ny < arrNum[0]) {
if (visited[nx][ny] === false) {
if (graph[nx][ny] === 0) {
tomatoCount.push([nx, ny]);
graph[nx][ny] = graph[x][y] + 1;
if (graph[nx][ny] > minDay) minDay = graph[nx][ny];
}
currCount++;
visited[nx][ny] = true;
}
}
}
}
return;
};
let findFalse = () => {
let torf = true;
for (let i = 0; i < arrNum[1]; i++) {
for (let j = 0; j < arrNum[0]; j++) {
if (!visited[i][j] && graph[i][j] === 0) {
return false;
}
}
}
return torf;
};
'κ°μΈκ³΅λΆ > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€][Node.js] 8393λ² : ν© (0) | 2021.12.15 |
---|---|
[λ°±μ€][Node.js] 7785λ² : νμ¬μ μλ μ¬λ (0) | 2021.12.13 |
[λ°±μ€][Node.js] 7572λ² : κ°μ§(εΉ²ζ―) (0) | 2021.12.11 |
[λ°±μ€][Node.js] 7568λ² : λ©μΉ (0) | 2021.12.09 |
[λ°±μ€][Node.js] 7567λ² : κ·Έλ¦ (0) | 2021.12.08 |
λκΈ