[ 문제 ]
[ 접근방법 ]
슬라이딩 윈도우를 통해 O(n) 만에 문제를 해결할 수 있다.
(i + k) % n 연산을 통해 인덱스가 n을 넘어 0으로 돌아가는 경우를 쉽게 처리할 수 있다.
[ 소스코드 ]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, d, k, c;
cin >> n >> d >> k >> c;
vector<int> vec(n);
for(int i = 0; i < n; i++)cin >> vec[i];
vector<int> chk(d + 1, 0);
int ans = 0, cnt = 0;
for(int i = 0; i < k; i++){
if(!chk[vec[i]])cnt++;
chk[vec[i]]++;
}
ans = cnt + (chk[c] ? 0 : 1);
for(int i = 0; i < n; i++){
chk[vec[i]]--;
if(!chk[vec[i]])cnt--;
if(!chk[vec[(i + k) % n]])cnt++;
chk[vec[(i + k) % n]]++;
ans = max(ans, cnt + (chk[c] ? 0 : 1));
}
cout << ans;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 2331 : 반복수열 (0) | 2024.12.19 |
---|---|
[ 백준 / C++ ] 11060 : 점프 점프 (0) | 2024.12.18 |
[ 백준 / C++ ] 12891 : DNA 비밀번호 (0) | 2024.12.16 |
[ 백준 / C++ ] 2776 : 암기왕 (0) | 2024.12.12 |
[ 백준 / C++ ] 11501 : 주식 (1) | 2024.12.11 |