728x90
문제
https://www.acmicpc.net/problem/17144
풀이
이 문제는 배열 돌리기 문제들을 풀었다면 쉽게 풀이가 가능한 문제다.
나는 먼지가 확산되는 동작을 구현함에 있어 큐에 먼지들의 위치와 값을 담은 다음 차례대로 확상해 나갔다.
코드
const input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt')
.toString().trim().split('\n').map(e => e.split(' ').map(Number));
const [n, m, t] = input.shift();
const map = input;
const filterPos = [];
const dir = [[-1, 0], [1, 0], [0, -1], [0, 1]];
let answer = 0;
map.forEach((el, idx) => {
el.forEach((e, i) => {
if (e === -1) filterPos.push(idx);
})
})
const spread = (map) => {
let que = [];
map.forEach((el, idx) => {
el.forEach((e, i) => {
if (e > 0) que.push([idx, i, e]);
})
})
while (que.length > 0) {
const [y, x, val] = que.shift();
const spD = Math.floor(val / 5);
for (let i = 0; i < 4; i++){
const nY = y + dir[i][0];
const nX = x + dir[i][1];
if (nY >= n || nY < 0 || nX >= m || nX < 0 || map[nY][nX] === -1) continue;
map[nY][nX] += spD;
map[y][x] -= spD;
}
}
}
const spin = (N, direction) => {
if (direction === 1) {
for (let i = N + 1; i < n - 1; i++){
map[i][0] = map[i + 1][0];
}
for (let i = 0; i < m - 1; i++){
map[n - 1][i] = map[n - 1][i + 1];
}
for (let i = n - 1; i > N; i--){
map[i][m - 1] = map[i - 1][m - 1];
}
for (let i = m - 1; i > 0; i--){
if (i === 1) map[N][i] = 0;
else {
map[N][i] = map[N][i - 1];
}
}
}
else if(direction === -1){
for (let i = N - 1; i > 0; i--){
map[i][0] = map[i - 1][0];
}
for (let i = 0; i < m - 1; i++){
map[0][i] = map[0][i + 1];
}
for (let i = 0; i < N; i++){
map[i][m - 1] = map[i + 1][m - 1];
}
for (let i = m - 1; i > 0; i--){
if (i === 1) map[N][i] = 0;
else {
map[N][i] = map[N][i - 1];
}
}
}
}
for (let i = 0; i < t; i++){
spread(map);
spin(filterPos[0], -1);
spin(filterPos[1], 1);
}
map.forEach(el => {
el.forEach(e => {
if (e > 0) answer += e;
})
})
console.log(answer)
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[Node.js] 15685_드래곤 커브 (0) | 2024.05.22 |
---|---|
[Node.js] 15684_사다리 (0) | 2024.05.21 |
[Node.js] 16235_나무 재테크 (0) | 2024.05.16 |
[Node.js] 16236_아기 상어 (0) | 2024.05.15 |
[Node.js] 14891_톱니바퀴 (0) | 2024.05.15 |