hsskey / algorithm-practice

🧑‍💻 Solving algorithms to level up
0 stars 0 forks source link

가장 긴 짝수 연속한 부분 수열 (large) #4

Open hsskey opened 1 month ago

hsskey commented 1 month ago

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

문제

📝 제약조건

💡 예시

문제 해결 과정

Step 1: 문제 이해하기

Step 2: 접근 방법

Step 3: 코드 설계

Step 4: 코드 구현

 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)