알고리즘/DP

[JS] 연속합 - 백준 1912

슈크림 붕어빵 2023. 12. 21. 13:27

문제

시간복잡도

O(n)

해결 방법

 

 

dp[i]에는 지금까지의 최대의 연속합을 저장한다. dp[i-1]+input[i]보다 input[i]가 더 크다면 input[i]부터의 연속합이 더 클 것이니  input[i]를 저장한다.

dp[i]=Math.max(dp[i-1]+input[i-1],input[i-1])

(코드에서는 input이 input[1]에 저장되어있음)

 

코드

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./example.txt";
let input = fs.readFileSync(filePath).toString().split("\n");
input[1] = input[1].split(" ");
for (let i = 0; i < input[1].length; i++) {
  input[1][i] = parseInt(input[1][i]);
}

let dp = [];
dp[0] = -Infinity;

for (let i = 1; i <= input[0]; i++) {
  dp[i] = Math.max(dp[i - 1] + input[1][i - 1], input[1][i - 1]);
}

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