[백준] 22826 가장 긴 짝수 연속한 부분 수열 - javascript

Yongwoo Cho·2021년 11월 3일
0

알고리즘

목록 보기
40/104

📌 문제

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

📌 풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");

let [n, k] = input[0].split(" ").map(Number);
let nums = input[1].split(" ").map(Number);

let left = (cnt = ans = 0);

for (let right = 0; right < n; right++) {
  if (nums[right] % 2 === 1) {
    cnt++;
  }
  while (cnt > k) {
    if (nums[left] % 2 === 1) cnt--;
    left++;
  }
  if (cnt <= k) ans = Math.max(ans, right - left - cnt + 1);
}
console.log(ans);

✔ 알고리즘 : 투포인터

✔ 홀수인 경우가 k개이하로 포함되도록 하는 부분수열의 최대길이를 구하는 문제이다

✔ 두개의 포인터를 0에서부터 시작하면서 투포인터 탐색을 한다

✔ right포인터 인덱스가 홀수인경우 cnt를 더해주고 while문에서 left를 당겨준다. left포인터 인덱스가 홀수인경우 cnt를 빼준다

✔ ans에 넣을때는 cnt가 k보다 작거나 같아야하며 짝수의 개수를 구해야 하므로 홀수의 개수인 cnt를 빼준다

✔ 난이도 : 백준 기준 실버 1

profile
Frontend 개발자입니다 😎

0개의 댓글