https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
구간 합 문제는 누적 합 배열을 이용하여 해결할 수 있습니다.
예를 들어 [5, 4, 3, 2, 1]로 배열이 주어진 경우 (2, 4)는 4까지의 합 - 1까지의 합으로 나타낼 수 있습니다.
⚠️ 단, (1, 1)도 처리할 수 있어야 하기 때문에 첫 요소에 0을 넣어주어야 합니다.
아래는 전체 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n, m; cin >> n >> m;
vector<int> accu = {0}; // 누적 배열
long long sum = 0;
for(int i = 0; i < n; i++){
int t; cin >> t;
sum += t;
accu.push_back(sum); // 입력 받으면서 누적 배열을 만듦.
}
for(int i = 0; i < m; i++){
int x, y; cin >> x >> y;
cout << accu[y] - accu[x - 1] << "\n"; // 구간 합 출력
}
}
'Algorithm' 카테고리의 다른 글
[백준 11660번] 구간 합 구하기 5 (C++) (0) | 2022.04.07 |
---|---|
[백준 5525번] IOIOI (C++) (0) | 2022.04.06 |
[백준 18870번] 좌표 압축 (C++) (0) | 2022.04.03 |
[백준 11723번] 집합 (C++) (0) | 2022.04.01 |
[백준 17837번] 새로운 게임 2 (C/C++) (0) | 2022.04.01 |