# 본인 풀이

#include <bits/stdc++.h>
using namespace std;
int n, k;
int cel[100000];
int psum[100001];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n >> k;
    for (int i = 0; i < n; i++){
        cin >> cel[i];

        psum[i] = psum[i - 1] + cel[i];
    }

    int max = -INFINITY;
    for (int i = k - 1; i < n; i++){
        if(max < psum[i] - psum[i-k]){
            max = psum[i] - psum[i - k];
        }
    }
    cout << max << "\n";

    return 0;
}
  1. 초기에는 psum 누적합 배열을 사용하지 않고 매번 For문에서 누적합 계산 후 push하는 형태로 구현했는데, 시간복잡도 O(n^2)으로 시간초과가 발생하였음.
  2. 누적합으로 로직 개선 후 O(n)으로 시간복잡도가 개선되었고 정답처리되었음.

# 개선 코드

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, k, temp, psum[100001], ret = -10000004;

int main()
{
    ios::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;
}
  1. 딱히 개선이랄것은 없었음
  2. ret - 최대 최소 범위 설정에 대한 로직이 살짝 달랐는데, INFINITY 상수를 사용해도 상관없지만 타입에 따라 그 값이 달라질 수 있기 때문에 명확하게는 범위에 따라 설정해주는 것이 좋을 수 있다. (굳이 안해도 될듯)