https://school.programmers.co.kr/learn/courses/30/lessons/92344
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
누적합을 통해 효율성 확보
2022 카카오 신입 공채 1차 온라인 코딩테스트 for Tech developers 문제해설
지난 2021년 9월 11일 토요일 오후 2시부터 7시까지 5시간 동안 2022 KAKAO BLIND RECRUITMENT 1차 코딩 테스트가 진행되었습니다. 테스트에는 총 7개의 문제가 출제되었으며, 개발 언어는 C++, Java, JavaScript, K
tech.kakao.com
누적합?
문제에서 수열이 주어지고 어떤 구간의 값의 합을 구해야 할 때 쓰일 수 있습니다.
#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 |