문제접근
•
left를 기점으로 right가 돌면서 k를 넘지 않거나 범위를 넘기 전까지 길이 증가
놓쳤던 부분
•
겹치는 개수가 k를 넘지 않았을 경우, answer가 제대로 업데이트 되지 않음
코드
7588 KB
52 ms
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
int n, k;
vector<int> v;
unordered_map<int, int> m;
int leftIndex = 0, rightIndex = 0;
int answer = 0, tmp = 0;
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);ㅁ
cin >> n >> k;
v.resize(n);
for (int i = 0; i < n; i++)
cin >> v[i];
while (leftIndex < n)
{
while (rightIndex < n)
{
if (m[v[rightIndex]] == k)
{
answer = max(answer, tmp);
m[v[leftIndex]]--;
tmp--;
break ;
}
else if (m[v[rightIndex]])
m[v[rightIndex]]++;
else
m[v[rightIndex]] = 1;
tmp++;
rightIndex++;
}
if (rightIndex == n)
{
answer = max(answer, tmp);
break ;
}
leftIndex++;
}
cout << answer;
return (0);
}
C++
복사