PS/백준
2531 - 회전 초밥
Mingi Kim
2025. 2. 15. 13:30
문제
https://www.acmicpc.net/problem/2531
느낀점
투 포인터 기본 문제였다. 슬라이딩 윈도우 타입의 기본 문제
풀이
#include <iostream>
#include <vector>
using namespace std;
int countSushiType(vector<int> &count)
{
int result = 0;
for (size_t i = 0; i < count.size(); i++)
{
if (count[i] != 0)
{
result++;
}
}
return result;
}
int main()
{
int N, d, k, c;
cin >> N >> d >> k >> c;
vector<int> count(d + 1, 0);
vector<int> sushi(N);
int left = 0, right = left + k - 1;
for (int i = 0; i < N; i++)
{
cin >> sushi[i];
if (left <= i && i <= right)
{
count[sushi[i]]++;
}
}
count[c]++;
int maxValue = countSushiType(count);
for (int i = left + 1; i < N; i++)
{
right = (i + k - 1) % N;
count[sushi[i - 1]]--;
count[sushi[right]]++;
maxValue = max(maxValue, countSushiType(count));
}
cout << maxValue;
return 0;
}