문제링크
https://www.acmicpc.net/problem/14719
문제풀이
일단 블록이 쌓여있는 형태를 2차원 배열로 만들었다. 그리고 맨위 row부터 빗물이 쌓이는 조건을 충족시 해당 빗물을 카운팅하면서 쌓이는 빗물의 양을 계속 합산하였고 이를 맨 아랫줄 row까지 진행하면 쌓인 빗물의 양을 알 수 있다. 아이디어를 떠오르기까지가 꽤 걸렸다.
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let [H, W] = input
.shift()
.split(" ")
.map((n) => Number(n));
let map = Array.from({ length: H }, () => {
return Array(W).fill(0);
});
let arr = input[0].split(" ").map((n) => Number(n));
arr.forEach((height, column) => {
for (let i = 0; i < height; ++i) {
map[H - 1 - i][column] = 1;
}
});
// 위에서 아래로 체크하면서 내려와야 함
let answer = 0;
let temp = 0;
let flag = undefined;
for (let r = 0; r < H; ++r) {
flag = 0;
for (let c = 0; c < W; ++c) {
if (flag === 1) {
if (map[r][c] === 0) {
++temp;
} else {
answer += temp;
temp = 0;
}
} else {
// flag =0 일때
if (map[r][c] === 1) {
flag = 1;
temp = 0;
} else {
continue;
}
}
}
}
console.log(answer);
'🔒Algorithm' 카테고리의 다른 글
백준[JS] > 1244번 스위치 켜고 끄기 (0) | 2025.03.06 |
---|---|
백준[JS] > 23971번 ZOAC 4 (0) | 2025.03.06 |
백준[JS] > 1446번 지름길 (0) | 2025.03.05 |
백준[JS] > 20125번 쿠키의 신체 측정 (0) | 2025.03.05 |
백준[JS] > 9655번 돌게임 (0) | 2025.03.05 |