프로그래머스
파괴되지 않은 건물 C++
paysmile
2022. 2. 15. 00:11
https://programmers.co.kr/learn/courses/30/lessons/92344
코딩테스트 연습 - 파괴되지 않은 건물
[[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10 [[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6
programmers.co.kr
#include <string>
#include <vector>
#include <cstring>
using namespace std;
int solution(vector<vector<int>> board, vector<vector<int>> skill) {
int answer = 0;
int n = board.size();
int m = board[0].size();
int tmp[1010][1010];
memset(tmp, 0, sizeof(tmp));
for (int i = 0; i < skill.size(); i++) {
int type = skill[i][0];
int x1 = skill[i][1];
int y1 = skill[i][2];
int x2 = skill[i][3];
int y2 = skill[i][4];
int deg = skill[i][5];
if (type == 1) deg = -deg;
tmp[x1][y1] += deg;
tmp[x1][y2 + 1] -= deg;
tmp[x2 + 1][y1] -= deg;
tmp[x2 + 1][y2 + 1] += deg;
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < m; j++) {
tmp[i][j] += tmp[i-1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 1; j < m; j++) {
tmp[i][j] += tmp[i][j-1];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
board[i][j] += tmp[i][j];
if (board[i][j] > 0) answer++;
}
}
return answer;
}