728x90
문제
https://www.acmicpc.net/problem/16918
풀이
이 문제를 처음 봤을 때는 4가지 경우가 반복되는 문제라고 생각해 구현을 해봤다.하지만, 통과가 되지 않았으므로 매 시간마다 변화를 주는 방식으로 풀이했다.
문제 풀이는 흠... 그냥 간단한 BFS 문제이다.
4방향의 상태를 체크하며 폭탄이 폭발한다.
코드
const input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt')
.toString().trim().split('\n').map(e => e.split(' '));
const [r, c, n] = input.shift().map(Number);
const map = input.map(el => el[0].trim().split(''));
const boom = Array.from({ length: r }, () => Array(c).fill(0));
const dir = [[-1, 0], [1, 0], [0, -1], [0, 1]];
let time = 1;
for (let i = 0; i < r; i++){
for (let j = 0; j < c; j++){
if (map[i][j] === 'O') boom[i][j] = 3;
}
}
while (time <= n) {
if (time % 2 === 0) {
for (let i = 0; i < r; i++){
for (let j = 0; j < c; j++){
if (map[i][j] === '.') {
map[i][j] = "O";
boom[i][j] = time + 3;
}
}
}
}
else {
for (let i = 0; i < r; i++){
for (let j = 0; j < c; j++){
if (boom[i][j] === time) {
map[i][j] = '.';
for (let k = 0; k < 4; k++){
const nx = i + dir[k][0];
const ny = j + dir[k][1];
if (nx >= 0 && nx < r && ny >= 0 && ny < c && map[nx][ny] === "O" && boom[nx][ny] !== time) {
map[nx][ny] = '.';
boom[nx][ny] = 0;
}
}
}
}
}
}
time += 1;
}
console.log(map.reduce((acc, cur) => {
return acc + cur.reduce((a, c) => a + c, "") + '\n';
}, ""))
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[JS] 1926번 그림 (0) | 2024.08.13 |
---|---|
[Node.js] 20056_마법사 상어와 파이어볼 (0) | 2024.07.11 |
[Node.js] 11053_가장 긴 증가하는 부분 수열 (0) | 2024.07.05 |
[Node.js] 20055_컨베이어 벨트 위의 로봇 (0) | 2024.07.04 |
[Node.js] 16967_배열 복원하기 (0) | 2024.07.03 |