Coding Problem

[프로그래머스] 카카오 - 파괴되지 않은 건물

Yepchani 2025. 1. 30. 16:00
반응형

문제

2022 카카오 블라인드 채용 - 파괴되지 않은 건물

https://school.programmers.co.kr/learn/courses/30/lessons/92344

 

 

풀이

설명

모든 스킬이 끝난 뒤 파괴되지 않은 건물의 개수를 구하는 문제입니다.

 

누적합을 이용해 해결할 수 있습니다.

 

예시 코드

function solution(board, skill) {
  const n = board.length;
  const m = board[0].length;
  const damage = Array.from({ length: n + 1 }, () => Array(m + 1).fill(0));
  let result = 0;

  skill.forEach(([type, r1, c1, r2, c2, degree]) => {
    const effect = type === 1 ? -degree : degree;
    damage[r1][c1] += effect;
    damage[r1][c2 + 1] -= effect;
    damage[r2 + 1][c1] -= effect;
    damage[r2 + 1][c2 + 1] += effect;
  });

  for (let i = 0; i < n; i++) {
    for (let j = 0; j < m; j++) {
      damage[i][j + 1] += damage[i][j];
    }
  }

  for (let j = 0; j < m; j++) {
    for (let i = 0; i < n; i++) {
      damage[i + 1][j] += damage[i][j];
    }
  }

  for (let i = 0; i < n; i++) {
    for (let j = 0; j < m; j++) {
      if (board[i][j] + damage[i][j] > 0) result++;
    }
  }

  return result;
}