오늘의 알고리즘

[C++] 백준 20922 겹치는 건 싫어

하늘하늘 . 2022. 6. 15. 00:27
#include <iostream>
#include <algorithm>
#include <vector>
 
int val[200001] = {};
 
int main()
{
    int N = 0;
    int K = 0;
    std::cin >> N >> K;
 
    std::vector<int> vec(N, 0);
 
    int iStart = 0;
    int iEnd = 0;
    int iMax = 0;
 
    for (int i = 0; i < N; ++i)
    {
        std::cin >> vec[i];
    }
 
    while (iStart <= iEnd)
    {
        if (iEnd == N)
            break;
 
        if (val[vec[iEnd]] >= K) 
            --val[vec[iStart++]];
 
        else 
        {
            iMax = std::max(iMax, iEnd - iStart + 1);
            ++val[vec[iEnd++]];
        }
    }
 
    std::cout << iMax;
 
    return 0;
}

 

투 포인터, 값과 크기를 나눠서 찾는 게 중요한 문제