문제
https://www.acmicpc.net/problem/20922
20922번: 겹치는 건 싫어
홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열
www.acmicpc.net
접근 방법
dp문제인 줄 알았다.
근데 투 포인터 문제라고 하길래 투 포인터가 뭔지 검색해봤다.
투 포인터를 알고 나서 다시 봤는데도 구현방법이 떠오르지 않아서, 다른 사람이 푼 걸 봤다.
그냥 끝까지 구현 해볼 걸 그랬다.
할 수 있었을 거 같은데, 아쉽다.
코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> arr(n, 0);
for (int i=0;i<n;i++) {
cin >> arr[i];
}
vector<int> cnt(100001, 0);
int start = 0;
int max_num = 0;
for (int i=0;i<n;i++) {
cnt[arr[i]]++;
if (cnt[arr[i]] > k) {
while(cnt[arr[i]] > k) {
cnt[arr[start]]--;
start++;
if (start >= n) break;
}
}
max_num = max(max_num, i - start + 1);
}
cout << max_num << endl;
return 0;
}
개선할 점
문제에서 제시한 정수 범위를 잘 못 적어 2번 에러 났다.
문제를 잘 보자.
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준 14719] - 빗물 c++ (1) | 2024.02.13 |
---|---|
[백준 2531] - 회전 초밥 c++ (2) | 2024.02.13 |
[백준 17615] - 볼 모으기 c++ (1) | 2024.02.13 |
[백준 14940] - 쉬운 최단거리 c++ (1) | 2024.02.13 |
[백준 9017] - 크로스 컨트리 c++ (1) | 2024.02.11 |