[백준/14719] 빗물 - JavaScript

이상돈·2024년 3월 14일
post-thumbnail

문제분류 : 구현

난이도 : 골드 5

출처 : 백준 - 빗물

문제

제한사항

📌 내가 생각한 풀이

벽을 세우기 위해, 열을 기준으로 벽을 만들어주고, 만든 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인 인덱스들을 모아 계산해주면 되었다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글