kakasoo

[node.js] 가장 큰 증가 부분 수열 ( 백준 11055번 ) 본문

프로그래밍/알고리즘 풀이

[node.js] 가장 큰 증가 부분 수열 ( 백준 11055번 )

카카수(kakasoo) 2021. 3. 30. 19:10
반응형

이전 부분 수열 문제들처럼 풀되 조건만 바꿔주면 된다. 그런데 나는 틀렸었는데, 그 이유는 DP[i]의 값을 1로 초기화했기 때문이다.
이전 문제들은 개수를 세는 것이기 때문에 전부 1로 시작했겠지만, 이건 합산하는 것이기 때문에 각 DP[i]는 자기 차례의 숫자가 초깃값으로 저장되어야 한다.

const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.output,
});

let count = 0;
rl.on("line", (line) => {
    if (!count) {
        count = Number(line);
    } else {
        main(line);
        rl.close();
    }
}).on("close", () => {
    process.exit();
});

/**
 *
 * @param {string} line
 */
const main = (line) => {
    const numbers = line.split(" ").map(Number);
    const DP = [];

    for (let i = 0; i < numbers.length; i++) {
        DP[i] = numbers[i];
        for (let j = 0; j < i; j++) {
            if (numbers[j] < numbers[i] && DP[i] < DP[j] + numbers[i]) {
                DP[i] = DP[j] + numbers[i];
            }
        }
    }
    console.log(Math.max(...DP));
};
반응형