주어진 조건만큼의 중복 수 가 있는지 체크해 가면서 덱에 넣어준 풀이이다. 굳이 덱을 안사용하고 두포인트로 잡아서 풀었어도 될거같다.
#include <iostream>
#include <deque>
#include <vector>
#include <cmath>
using namespace std;
// 겹치는 건 싫어
int main () {
int n, k, answer = 0, input;
cin >> n >> k;
vector<int> vis(100001, 0);
deque<int> dq;
for (int i = 0; i < n; i++) {
cin >> input;
vis[input]++;
dq.push_back(input);
while (vis[input] > k) {
vis[dq.front()]--;
dq.pop_front();
}
answer = max(answer, (int)dq.size());
}
cout << answer;
}
C++
복사