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
[난이도] level3
[유형] 누적합
[풀이]
공식풀이 : https://tech.kakao.com/2022/01/14/2022-kakao-recruitment-round-1/#%EB%AC%B8%EC%A0%9C-6-%ED%8C%8C%EA%B4%B4%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EA%B1%B4%EB%AC%BC
#include <string> #include <vector> using namespace std; int sum[1002][1002],N,M; int solution(vector<vector<int>> board, vector<vector<int>> skill) { int answer = 0; N=board.size(); M=board[0].size(); for(auto s : skill){ int d=s[5]; if(s[0]==1) d*=-1; sum[s[1]][s[2]]+=d; sum[s[3]+1][s[2]]+=-d; sum[s[1]][s[4]+1]+=-d; sum[s[3]+1][s[4]+1]+=d; } for(int i=0;i<N;i++) for(int j=1;j<M;j++) sum[i][j]+=sum[i][j-1]; for(int i=0;i<M;i++) for(int j=1;j<N;j++) sum[j][i]+=sum[j-1][i]; for(int i=0;i<N;i++) for(int j=0;j<M;j++) if(board[i][j]+sum[i][j]>0) answer++; return answer; }
https://github.com/has2/Problem-Solving/blob/master/programmers/level3/파괴되지_않은_건물.cpp
'Problem-Solving > Programmers' 카테고리의 다른 글
[프로그래머스][level2] 두 큐 합 같게 만들기 (C++) (0) | 2022.09.26 |
---|---|
[프로그래머스][level3] 사라지는 발판 (C++) (0) | 2022.05.29 |
[프로그래머스][level3] 양과 늑대 (C++) (0) | 2022.05.29 |
[프로그래머스][level2] 주차 요금 계산 (C++) (0) | 2022.05.29 |
[프로그래머스][level2] k진수에서 소수 개수 구하기 (C++) (0) | 2022.05.29 |