관리 메뉴

fatalite

🏳 겹치는 건 싫어 - 20922번 백준 본문

코딩 인터뷰/C++

🏳 겹치는 건 싫어 - 20922번 백준

fataliteforu 2023. 9. 16. 12:44

문제

문제 난이도 : 실버 1

문제 분류 : 두 포인터

 

문제 풀이 및 코드

복잡...

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <unordered_set>
using namespace std;

void Init()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

int main()
{
    //Initialize
    Init();

    //Input
    int n, k = 0;
    cin >> n >> k;
    vector<int> List;
    vector<int> Count(100001,0);
    for (int i = 0; i < n; ++i)
    {
        int Tmp;
        cin >> Tmp;
        List.push_back(Tmp);
    }
    //Main Logic

    int Start = 0;
    int End = 0;
    int Length = 0;
    while (true)
    {
        if (End >= n || Start >= n || Start > End) break;

        if (Count[List[End]] < k)
        {
            Count[List[End]]++;
            End++;
            Length = max(Length, End - Start);
        }
        else if(Count[List[End]] == k)
        {
            Count[List[Start]]--;
            Start++;
        }
    }
    cout << Length;
}