const fs = require('fs')
const filePath = process.platform === 'linux' ? '/dev/stdin' : `${__dirname}/input.txt`
const input = fs.readFileSync(filePath).toString().split('\n')
const [n, k] = input[0].split(' ').map(Number)
const arr = input[1].split(' ').map(Number)
let result = 0
let eraseCount = 0
let end = 0
// start를 고정시키고 end를 증가시키는 형태
for (let start = 0; start < n; start++) {
while(end < n) {
if(arr[end] % 2 === 0) end += 1 // 짝수인 경우 end값을 증가
else { // 홀수인 경우
if(eraseCount === k) break // 더 지울수 없다면 종료
eraseCount+= 1
end+=1
}
}
result = Math.max(result, end - start - eraseCount) // 범위의 길이 계산
// start를 한 칸 오른쪽으로 이동할 때, 가능하다면 지울 수 있는 개수 증가
if(arr[start] % 2 === 1) eraseCount--
}
console.log(result)
가장 긴 짝수 연속한 부분 수열 (large)
문제
📝 제약조건
제약조건 작성
💡 예시
input
output
문제 해결 과정
Step 1: 문제 이해하기
제약조건
,input
,output
을 확인하여 문제를 정확히 파악합니다.Step 2: 접근 방법
직관적으로 생각하기
자료구조와 알고리즘 활용
메모리 사용
Step 3: 코드 설계
Step 4: 코드 구현