

벽을 세우기 위해, 열을 기준으로 벽을 만들어주고, 만든 2차원 배열의 board를 아래부터 탐색하자. board[4] -> board[3] ... 순으로 탐색하는데, 이때 값이 1인 인덱스를 구하여, next - prev -1 해주어 빗물의 고인 count를 구하자.
let inputs = require("fs")
.readFileSync("boj_14719_빗물.txt")
.toString()
.trim()
.split("\n");
function solution(input) {
let answer = 0;
let [n, m] = input[0].split(" ").map(d => +d);
let height = input[1].split(" ").map(d => +d);
let board = Array.from(Array(n), () => new Array(m).fill(0));
height.forEach((data, idx) => {
for (var k = n - 1; k > n - data - 1; k--) {
board[k][idx] = 1;
}
});
for (var i = n - 1; i >= 0; i--) {
let arr = board[i];
let count = 0;
let idxOne = [];
arr.forEach((d, idx) => (d === 1 ? idxOne.push(idx) : null));
for (var k = 0; k < idxOne.length - 1; k++) {
let prev = idxOne[k];
let next = idxOne[k + 1];
count += next - prev - 1;
}
answer += count;
}
console.log(answer);
}
solution(inputs);
투포인터를 사용하여, 빗물을 계산하려고했는데, 굳이 그렇게 할 필요가 없이, 1인 인덱스들을 모아 계산해주면 되었다.