fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 22862 (C++) 가장 긴 짝수 연속한 부분 수열 (large)
최초 업로드: 2025-03-11 22:15:00
최근 수정 시간: 2025-07-25 10:16:49
게시자: rlatjwls3333
카테고리: 백준
조회수: 14
# [Gold V] 가장 긴 짝수 연속한 부분 수열 (large) [문제 링크](https://www.acmicpc.net/problem/22862) ## 문제 설명 <p>길이가 $N$인 수열 $S$가 있다. 수열 $S$는 1 이상인 정수로 이루어져 있다.</p> <p>수열 $S$에서 원하는 위치에 있는 수를 골라 최대 $K$번 삭제를 할 수 있다.</p> <p>예를 들어, 수열 $S$가 다음과 같이 구성되어 있다고 가정하자.</p> <pre>수열 S : 1 2 3 4 5 6 7 8</pre> <p>수열 $S$에서 4번째에 있는 4를 지운다고 하면 아래와 같다.</p> <pre>수열 S : 1 2 3 5 6 7 8 </pre> <p>수열 $S$에서 최대 $K$번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 구해보자.</p> ## 입력 <p>수열 $S$의 길이 $N$와 삭제할 수 있는 최대 횟수인 $K$가 공백으로 구분되어 주어진다.</p> <p>두 번째 줄에는 수열 $S$를 구성하고 있는 $N$개의 수가 공백으로 구분되어 주어진다.</p> ## 출력 <p>수열 $S$에서 최대 $K$번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 출력한다.</p> ## 풀이 #### N의 값이 최대 백만, K의 값이 최대 10만까지 주어집니다. #### 이 문제는 홀수를 최대 K개 포함하는 수열을 구하면 됩니다. #### 이는 투 포인터 기초 문제와 유사하여 쉽게 구현할 수 있습니다. ``` c++ #include<bits/stdc++.h> using namespace std; bool arr[1000000]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; for(int i=0;i<n;i++) { int val; cin >> val; arr[i] = val%2==0; } int maxLen=0, len=0, remove=0; int left=0, right=0; while(right<n) { if(arr[right]) { len++; right++; maxLen = max(maxLen, len); } else { if(remove==k) { if(!arr[left]) remove--; else len--; left++; } else { remove++; right++; } } } cout << maxLen; } ```