K
는 1
과 N
사이의 정수라고 했기 때문에 1~(10만-1)
의 값을 가진다.
문제에서 중요했던 점은 최솟값을 정하는 것이다. 문제에서 최솟값을 구하라고 한다면 최댓값부터 내려가야 한다. (반대로 최댓값을 구하라면 최솟값부터 갱신하며 올라가야 한다) 그렇다면 최솟값을 무엇으로 정하는가?
최악의 경우 -100
* 100000
- 1
이 될 것이다. 그런데 문제마다 좀 다르므로 넉넉하게 오차를 4 정도 두어서 ret = -10000004;
로 설정했다.
#include<iostream>
using namespace std;
int n, k, temp, psum[100001], ret = -10000004;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> k;
for(int i=1; i<=n; i++)
{
cin >> temp;
psum[i] = psum[i-1] + temp;
}
for(int i=k; i<=n; i++)
{
ret = max(ret, psum[i] - psum[i-k]);
}
cout << ret << '\n';
return 0;
}