기타/코딩테스트

(코테) 프로그래머스_파괴되지 않은 건물 *dp

불광동 물주먹 2025. 8. 9. 01:47

 

 

 

 

 

 

class Solution {
    public int solution(int[][] board, int[][] skill) {
        int n = board.length, m = board[0].length;
        int[][] diff = new int[n + 2][m + 2];

        for (int[] s : skill) {
            int type = s[0], r1 = s[1], c1 = s[2], r2 = s[3], c2 = s[4], d = s[5];
            int degree = (type == 1) ? -d : d;

            diff[r1][c1] += degree;
            diff[r1][c2 + 1] -= degree;
            diff[r2 + 1][c1] -= degree;
            diff[r2 + 1][c2 + 1] += degree;
        }

        // 행 누적
        for (int i = 0; i < n + 1; i++) {
            for (int j = 1; j < m + 1; j++) {
                diff[i][j] += diff[i][j - 1];
            }
        }
        // 열 누적
        for (int j = 0; j < m + 1; j++) {
            for (int i = 1; i < n + 1; i++) {
                diff[i][j] += diff[i - 1][j];
            }
        }

        int ans = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (board[i][j] + diff[i][j] > 0) ans++;
            }
        }
        return ans;
    }
}