백준 2670 JS 풀이

hun2__2·2023년 8월 10일
0

코딩테스트

목록 보기
38/48

구하는 값

한개 이상의 연속된 수들의 곱의 최대값

핵심 아이디어

dp[i]를 i를 마지막 인덱스로 하는 연속곱의 최대값이라 정의하자

주의할 점은 i번째 인덱스 값을 무시하고 넘어갈 수 없다.

즉, d[i-1], d[i-1] * arr[i], arr[i] 를 비교하는게 아니라

d[i-1] * arr[i], arr[i] 를 비교하는거다!!!!!!!!

이거 때문에 실버 4문제가지고 1시간 넘게 맞왜틀 해버렸다…

문제를 잘 파악하자ㅠㅠ

저거를 토대로 점화식을 세우면

d[i] = Math.max(d[i-1] * arr[i], d[i]) 가 된다.

코드

const input = require("fs").readFileSync("dev/stdin").toString().trim().split("\n");

const n = input[0] * 1;
const d = input.slice(1).map(Number);

for (let i = 1; i < n; i++) {
    d[i] = Math.max(d[i], d[i - 1] * d[i]);
}

console.log(Math.max(...d).toFixed(3));
profile
과정을 적는 곳

0개의 댓글