๐ŸŽฒ ๋ฐฑ์ค€ 2240๋ฒˆ ์ž๋‘๋‚˜๋ฌด

Jeongeunยท2023๋…„ 8์›” 23์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
112/187

๋ฐฑ์ค€ 2240๋ฒˆ

๐Ÿงธ ์ •๋‹ต์„ ๋ณด๊ณ ๋„ ์ดํ•ดํ•˜๋Š”๋ฐ ํ•œ์ฐธ ๊ฑธ๋ ธ๋‹ค. dp๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์•„์ง ๋ฉ€์—ˆ๋‹ค.
๐ŸŽจ ์ฐธ๊ณ  ์ฝ”๋“œ

const fs = require('fs'); 
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const [T, W] = input.shift().split(" ").map(Number);
input = input.map(Number);

//[์‹œ๊ฐ„][์ด๋™ํšŸ์ˆ˜]
const dp = Array.from(new Array(T + 1), () => new Array(W + 1).fill(0));

for (let i = 1; i <= T; i++) {
  //1๋ฒˆ ๋‚˜๋ฌด์—์„œ ํ•œ ๋ฒˆ๋„ ์›€์ง์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ(j===0)

  //์ž๋‘๊ฐ€ 1๋ฒˆ ๋‚˜๋ฌด์— ๋–จ์–ด์ง
  if (input[i - 1] === 1) {
    dp[i][0] = dp[i - 1][0] + 1;
  }
  //์ž๋‘๊ฐ€ 2๋ฒˆ ๋‚˜๋ฌด์— ๋–จ์–ด์ง
  else {
    dp[i][0] = dp[i - 1][0];
  }

  //ํ•œ ๋ฒˆ ์ด์ƒ ์›€์ง์ธ ๊ฒฝ์šฐ
  for (let j = 1; j <= W; j++) {
    //์ž๋‘๊ฐ€ 1๋ฒˆ ๋‚˜๋ฌด์—์„œ ๋–จ์–ด์ง€๊ณ , ์ด๋™ํšŸ์ˆ˜ ์ง์ˆ˜์ธ ๊ฒฝ์šฐ
    if (input[i - 1] === 1 && j % 2 === 0) {
      //์ด์ „ ์œ„์น˜์—์„œ ์›€์ง์ž„ vs ๊ฐ€๋งŒํžˆ ์žˆ์Œ
      dp[i][j] = Math.max(dp[i - 1][j - 1] + 1, dp[i - 1][j] + 1);
    }
    //์ž๋‘๊ฐ€ 2๋ฒˆ ๋‚˜๋ฌด์—์„œ ๋–จ์–ด์ง€๊ณ , ์ด๋™ํšŸ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ
    else if (input[i - 1] === 2 && j % 2 !== 0) {
      //์ด์ „ ์œ„์น˜์—์„œ ์›€์ง์ž„ vs ๊ฐ€๋งŒํžˆ ์žˆ์Œ
      dp[i][j] = Math.max(dp[i - 1][j - 1] + 1, dp[i - 1][j] + 1);
    }
    //์ž๋‘์˜ ์œ„์น˜์™€ ์‚ฌ๋žŒ์˜ ์œ„์น˜๊ฐ€ ๋‹ค๋ฆ„(์ž๋‘๋ฅผ ๋จน์„ ์ˆ˜ ์—†์Œ)
    else {
      //์›€์ง์—ฌ์„œ ๋ชป๋จน์Œ vs ์›€์ง์ด์ง€ ์•Š์•„์„œ ๋ชป๋จน์Œ
      dp[i][j] = Math.max(dp[i - 1][j - 1], dp[i - 1][j]);
    }
  }
}

console.log(Math.max(...dp[T]));

0๊ฐœ์˜ ๋Œ“๊ธ€