https://www.acmicpc.net/problem/3055
문제

const INPUT_FILE = process.platform === "linux" ? "/dev/stdin" : "./inputs.txt";
const inputs = require("fs")
.readFileSync(INPUT_FILE)
.toString()
.trim()
.split("\n");
const [R, C] = inputs[0].split(" ").map(Number);
const board = inputs.slice(1).map((str) => str.split(""));
const dLoc = [
[-1, 0],
[1, 0],
[0, -1],
[0, 1],
];
const queue = [];
let water = [];
for (let i = 0; i < R; i++) {
for (let j = 0; j < C; j++) {
if (board[i][j] === "S") {
queue.push([i, j, 0]);
} else if (board[i][j] === "*") {
water.push([i, j]);
}
}
}
while (queue.length) {
const [r, c, min] = queue.shift();
const newWater = [];
for (let i = 0; i < water.length; i++) {
const [r, c] = water[i];
for (const [dr, dc] of dLoc) {
const nr = r + dr;
const nc = c + dc;
if (nr < 0 || nr >= R || nc < 0 || nc >= C) continue;
if (board[nr][nc] === ".") {
board[nr][nc] = "*";
newWater.push([nr, nc]);
}
}
}
water = newWater;
for (const [dr, dc] of dLoc) {
const nr = r + dr;
const nc = c + dc;
if (nr < 0 || nr >= R || nc < 0 || nc >= C) continue;
if (board[nr][nc] === "D") {
console.log(min + 1);
process.exit();
}
if (board[nr][nc] === ".") {
board[nr][nc] = min + 1;
queue.push([nr, nc, min + 1]);
}
}
}
console.log("KAKTUS");