Make Unreal REAL.
article thumbnail
21921. 블로그

 

 

앞에서부터 차례대로 정해진 구간의 합을 구하는 전형적인 슬라이딩 윈도우 문제다.

  • 구간의 길이가 가변적인 투 포인터와 달리, 구간의 길이가 고정적이다.

 

#include <iostream>
#include <vector>
#include <map>

using namespace std;

pair<int, int> SlidingWindow(vector<int>& v, int w)
{
    int window = 0;
    map<int, int> mp;

    for (int i = 0; i < w; ++i)
        window += v[i];

    ++mp[window];

    for (int i = w; i < v.size(); ++i)
    {
        window += v[i] - v[i - w];
        ++mp[window];
    }

    return *mp.rbegin();
}

int main(int argc, char* argv[])
{
    int N, X;
    cin >> N >> X;

    vector<int> v(N);
    for (int i = 0; i < N; ++i) cin >> v[i];

    auto pr = SlidingWindow(v, X);

    if (pr.first == 0)
        cout << "SAD";
    else
        cout << pr.first << "\n" << pr.second;

    return 0;
}

'자료구조 & 알고리즘 > 백준' 카테고리의 다른 글

2003. 수들의 합 2  (0) 2023.09.17
12891. DNA 비밀번호  (0) 2023.09.16
11441. 합 구하기  (0) 2023.09.14
11657. 타임머신  (0) 2023.09.13
1197. 최소 스패닝 트리  (0) 2023.09.11
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그