본문 바로가기
알고리즘/백준 문제

22682 - 가장 긴 짝수 연속한 부분 수열 (large)

by HDobby 2023. 7. 15.

https://www.acmicpc.net/problem/22862

 

22862번: 가장 긴 짝수 연속한 부분 수열 (large)

수열 $S$에서 최대 $K$번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 출력한다.

www.acmicpc.net

과정

  1. l과 r 범위 내에서 홀수가 얼마나 있는지 체크한다.
  2. 만약 cnt(홀수 갯수)가 K를 넘어 선다면 l을 홀수 갯수가 감소할 때까지 옮긴다.
  3. r이 끝에 도달할 때 까지 반복한다.

코드

#include<iostream>
#include<vector>

using namespace std;

int N, K;
vector<int> S;

void input(){
    int a;

    cin>>N>>K;
    for(int i=0;i<N;++i){
        cin>>a;
        S.push_back(a);
    }
}

void solution(){
    int l=0, r=0, cnt=0;
    int ans=0;

    while(r<N){
        if(S[r] % 2 == 1){
            ++cnt;
        }

        while(cnt>K && l<r){
            cnt -= S[l++] % 2;
        }

        ans = max(ans, r-l+1-cnt);
        
        ++r;
    }

    cout<<ans<<'\n';
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    input();
    solution();

    return 0;
}

728x90

'알고리즘 > 백준 문제' 카테고리의 다른 글

17609 - 회문  (0) 2023.07.16
16401 - 과자 나눠주기  (0) 2023.07.15
17266 - 어두운 굴다리  (0) 2023.07.15
2179 - 비슷한 단어  (0) 2023.07.14
1446 - 지름길  (0) 2023.07.14

댓글