2531 - 회전 초밥

2025. 2. 15. 13:30PS/백준

문제

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;
}

'PS > 백준' 카테고리의 다른 글

20922 - 겹치는 건 싫어  (0) 2025.02.17
15565 - 귀여운 라이언  (0) 2025.02.17
22857 - 가장 긴 짝수 연속한 부분 수열 (small)  (0) 2025.02.14
2003 - 수들의 합  (0) 2025.02.14
14246 - K보다 큰 구간  (0) 2025.02.14