본문 바로가기
알고리즘

[백준/파이썬] #22862

by 룰루루 2025. 3. 27.

처음에는 이런 방식의 투 포인터를 적용해보았다. (적용하다가 좀 꼬여서 코드가 정확하진 않다)

import sys

input = sys.stdin.readline

N, K = map(int, input().split())
S = list(map(int, input().split()))

start_point = 0
for i, s in enumerate(S):
    if s % 2 == 0:
        start_point = i
        break

if start_point == 0:
    print(0)
else:
    left = start_point
    right = start_point
    count = K
    answer = 1
    while right < N:
        current_answer = 1
        while right < N and count > 0:
            right += 1
            if S[right] % 2 == 1:
                count -= 1
            else:
                current_answer += 1
        answer = max(answer, current_answer)
        while left < right and S[left + 1] % 2 == 1:
            if S[left] % 2 == 1:
                count += 1
            else:
                current_answer -= 1
        answer = max(answer, current_answer)
        right += 1

print(answer)

 

가장 긴 수열의 길이는 투 포인터로 재는 게 맞아 보였다. 다만 참고한 풀이처럼 그 안의 홀수 개수를 세는 다른 변수를 따로 두는 것이 더 간단한 방법이었을 것 같다. 

import sys

input = sys.stdin.readline

N, K = map(int, input().split())
S = list(map(int, input().split()))

end = 0
odd = 0
tmp = 0
answer = 0

for start in range(N):
    while odd <= K and end < N:
        if S[end] % 2 == 1:
            odd += 1
        else:
            tmp += 1
        end += 1

        if start == 0 and end == N:
            answer = tmp
            break
    
    if odd == K+1:
        answer = max(tmp, answer)
    
    if S[start] % 2 == 1:
        odd -= 1
    else:
        tmp -= 1

print(answer)

 

'알고리즘' 카테고리의 다른 글

[백준/파이썬] #15961  (0) 2025.03.29
[백준/파이썬] #1806  (0) 2025.03.28
[백준/파이썬&자바] #2470  (0) 2025.03.26
[백준/파이썬] #3151  (0) 2025.03.24
[백준/파이썬] #1106  (0) 2025.03.22