๐ŸŽฒ ๋ฐฑ์ค€ 11054๋ฒˆ ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

Jeongeunยท2023๋…„ 5์›” 25์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
66/185

๋ฐฑ์ค€ 11054๋ฒˆ

๐Ÿ’Š ์ฆ๊ฐ€์ˆ˜์—ดDP์™€ ๊ฐ์†Œ์ˆ˜์—ดDP๋ฅผ ๊ฐ๊ฐ ๋งŒ๋“  ํ›„ ํ•ฉ์ณ์ฃผ์–ด์•ผํ•œ๋‹ค.
๐Ÿงธ ๋‚œ ์ฆ๊ฐ€์ˆ˜์—ดDP ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์žŠ๊ณ ์žˆ์—ˆ๋‹ค..๐Ÿ˜ฅ ์ด์ œ๋Š” ๊ผญ ๊ธฐ์–ตํ•ด์•ผ์ง€.

์ฝ”๋“œ

const fs = require('fs'); 
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input.shift();
input = input[0].split(" ").map(Number);
let increaseDP = new Array(N).fill(1);
let decreaseDP = new Array(N).fill(1);
let dp = [];

for (let i = 1; i < N; i++) {
  let values = [1];
  for (let j = 0; j < i; j++) {
    if (input[j] < input[i]) {
      values.push(increaseDP[j] + 1);
    }
  }
  increaseDP[i] = Math.max(...values);
}

for (let i = N - 2; i >= 0; i--) {
  let values = [1];
  for (let j = N - 1; j > i; j--) {
    if (input[j] < input[i]) {
      values.push(decreaseDP[j] + 1);
    }
  }
  decreaseDP[i] = Math.max(...values);
}

for (let i = 0; i < N; i++) {
  dp[i] = increaseDP[i] + decreaseDP[i] - 1;
}

console.log(Math.max(...dp));

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