💡 Codeing Test/백준

백준 22862) 가장 긴 짝수 연속한 부분 수열 (large)

밈98 2024. 3. 8. 12:29

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

 

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

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

www.acmicpc.net

 

n,k =map(int,input().split())
S = list(map(int, input().split()))

lt = 0
rt = 0
cnt, res = 0, 0
while rt < n:
    
    if cnt > k:
        if S[lt] %2 ==1 :
            cnt -=1
        lt +=1
        continue
    else:
        if S[rt] %2 ==1 :
            cnt +=1

        rt +=1
    res = max(res, rt -lt -cnt)
print(res)

 

투 포인터 알고리즘 활용

 

1. K값을 기준으로 cnt 와 비교해서, k값이 더 많을 경우

왼쪽 포인터의 값을 조절해준다

2. k값이 적을경우에는 오른쪽 값을 움직여준다

3. while문 안에서 최댓값을 갱신해준다.