presum
이라는 변수에 저장하고 값을 갱신하는 방법을 썼음#include <bits/stdc++.h>
using namespace std;
int n, k;
int arr[100004];
int presum, ret;
int main(){
// 1. Input n, k and each temperature for n
cin >> n >> k;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
// 2. sum for arr[0] ~ arr[k-1]
for(int i = 0; i <= k-1; i++){
presum += arr[i];
}
ret = presum;
// 3. sum
for(int i = k; i < n; i++){
presum = presum - arr[i-k] + arr[i];
if(presum > ret) ret = presum;
}
cout << ret;
return 0;
}
1.psum
이라는 누적합 배열을 사용
2. ret
이라는 초기 값을 설정함 : 초기값을 100000 x -100(N의 최대 범위 x 온도 최소값) => 10,000,000 + 4(값 오버플로우 방지용)
3.누적합은 첫 번재 index부터 사용해야 함 => 0번째 Index는 항상 0이어서, 반복문을 더할 때 이상업게끔
4.max()
를 활용해 조건문 없애기
5.psum[i] - psum[i-k]
을 활용 : i번째 누적합에서 i-k누적합을 빼면 자연스럽게 i+1 ~ i까지의 합이 구해짐
#include <bits/stdc++.h>
using namespace std;
int n, k, temp, psum[100001];
int ret = -10000004;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// 1. input and make presum
cin >> n >> k;
for(int i = 1; i <= n; i++){
cin >> temp;
psum[i] = psum[i - 1] + temp;
}
// 2. calculate max value;
for(int i = k; i <= n; i++){
ret = max(ret, psum[i] - psum[i-k]);
}
cout << ret;
return 0;
}