오늘의 알고리즘

[C++]백준 2531번 회전 초밥

하늘하늘 . 2022. 4. 29. 21:26
#include <iostream> 
#include <vector>
#include <algorithm> 
 
int iCount[3001]; 
 
int main(void) 
{ 
	int N = 0;
	int d = 0;
	int k = 0;
	int c = 0;
	std::cin >> N >> d >> k >> c; 
	std::vector<int> vec(N); 
	int iAnswer = 0; 
	for (int i = 0; i < N; ++i) 
	{
		std::cin >> vec[i]; 
 
		if (i < k) 
			iAnswer += (iCount[vec[i]]++ == 0);
	} 
 
	int iResult = iAnswer; 
 
	for (int i = k; i < N + k; ++i) 
	{ 
		iAnswer += (iCount[vec[i]]++ == 0);
		iAnswer -= (--iCount[vec[(i - k) % N]] == 0);
 
		iResult = std::max(iResult, iAnswer + (iCount[c] == 0));
	} 
 
	std::cout << iResult << "\n"; 
 
	return 0; 
}
 

언오더드맵을 썻었는데 시간초과...

아예 처음부터 최소한의 범위를 만들어서 넣어주면 시간초과안된다.