https://school.programmers.co.kr/learn/courses/30/lessons/92344
누적합을 통해 효율성 확보
누적합?
문제에서 수열이 주어지고 어떤 구간의 값의 합을 구해야 할 때 쓰일 수 있습니다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<vector<int>> skill) {
int answer = 0;
int n = board.size(), m = board[0].size();
vector<vector<int>> acc(n+1, vector<int>(m+1, 0));
for(int i=0; i<skill.size(); i++){
int val = skill[i][5];
if(skill[i][0] == 1) val = -val;
acc[skill[i][1]][skill[i][2]] += val;
acc[skill[i][3]+1][skill[i][2]] -= val;
acc[skill[i][1]][skill[i][4]+1] -= val;
acc[skill[i][3]+1][skill[i][4]+1] += val;
}
for(int i=0; i<n+1; i++)
for(int j=1; j<=m; j++)
acc[i][j] += acc[i][j-1];
for(int j=0; j<m+1; j++)
for(int i=1; i<=n; i++)
acc[i][j] += acc[i-1][j];
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(board[i][j] + acc[i][j] > 0) answer++;
return answer;
}
'알고리즘 > 알고리즘' 카테고리의 다른 글
[C++] 프로그래머스 : 등산코스 정하기 (0) | 2022.11.01 |
---|---|
[C++] 프로그래머스 : 할인 행사 (0) | 2022.10.30 |
[C++] 프로그래머스 : 롤케이크 자르기 (0) | 2022.10.29 |
[C++] 프로그래머스 : 야간 전술보행 (0) | 2022.10.29 |
[JAVA] 프로그래머스 : 뉴스 클러스터링 (0) | 2022.08.05 |