문제
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
풀이
- 합 배열 공식 : S[i] = S[i - 1] + A[i]
- 구간 합 공식 : S[j] - S[i - 1]
구간 합 알고리즘
구간 합 알고리즘 연속적으로 나열된 수가 있을 때, 맨 앞부터 특정 위치까지의 합을 미리 구해 놓고 사용하는 알고리즘 시간 복잡도 - O(1) 구간 합 핵심 이론 합 배열 S를 만드는 공식 S[i] = A[0] +
soobin0821.tistory.com
코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M;
cin >> N >> M;
vector<int> A(N);
vector<int> sum(N, 0);
for(int n = 0; n < N; n++)
{
cin >> A[n];
// 구간 합 구하기
if(n == 0)
{
sum[n] = A[n];
}
else
{
sum[n] = sum[n - 1] + A[n];
}
}
for(int n = 0; n < M; n++)
{
int i, j;
cin >> i >> j; // 질의 범위 받기
cout << sum[j - 1] - sum[i - 2] << "\n"; // 부분 합 출력
}
return 0;
}
728x90
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]11724번 연결 요소의 개수 (0) | 2023.09.16 |
---|---|
[백준][C++]1253번 좋다 (0) | 2023.09.15 |
[백준][C++]1516번 게임 개발 (0) | 2023.07.21 |
[백준][C++]11404번 플로이드 (0) | 2023.07.16 |
[백준][C++]11004번 K번째 수 (0) | 2023.07.13 |