https://www.acmicpc.net/problem/12847

이 문제에서 구해야하는건 길이가 n인 배열에서 연속된 m개의 수의 합이 최대가 되는 것을 구하는 것
인덱스 처음부터 m까지의 수의 합을 구하는 방법도 있지만 m이 커질수록 중복된 연산이 많아짐
이때 생각해볼 수 있는게 누적합! 누적합 배열을 하나 만들어 m개의 수의 합을 중복 연산 없이 구하쟈
수가 매우 크므로 long long도 주의..!
#include <iostream>
using namespace std;
int n, m;
long long pay[100000];
long long pay_sum[100000];
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> pay[i];
}
if (m == 0)
{
cout << 0;
return 0;
}
pay_sum[0] = pay[0];
for (int i = 1; i < n; i++)
{
pay_sum[i] = pay_sum[i - 1] + pay[i];
}
long long max_p = pay_sum[m - 1];
for (int i = 1; i < n - m + 1; i++)
{
long long k = pay_sum[i + m - 1] - pay_sum[i - 1];
if (max_p < k)
max_p = k;
}
cout << max_p;
}
'알고리즘 > KOALA 알고리즘 스터디' 카테고리의 다른 글
| [BOJ/C++] 28279번 덱 2 (0) | 2025.05.11 |
|---|---|
| [BOJ/C++] 17298번 오큰수 (0) | 2025.05.02 |
| [BOJ/C++] 2230번 수 고르기 (0) | 2025.04.03 |
| [BOJ/C++] 11057번 오르막수 (0) | 2025.03.28 |
| [BOJ/C++] 14888번 연산자 끼워넣기 (0) | 2025.03.22 |