[백준 / JS] 2156 포도주 시식

hyunhee·2024년 9월 1일
0

algorithm

목록 보기
24/24

문제

포도주를 마시는데 세 잔 연속으로 마실 수 없고, 최대한 많이 마시는 문제
작년에도 파이썬으로 이 문제를 풀었었는데 이번에도 금방 풀지 못했다. 규칙을 잘 찾았어야지!

경우의 수는 3가지가 있다.
1. i번째 포도주와 i-1번째 포도주를 마시고 i-3번째까지의 포도주를 마시는 경우
-> wine[i] + wine[i - 1] + dp[i - 3]
2. i번째 포도주와 i-2번째까지의 포도주를 마시는 경우
-> wine[i] + dp[i - 2]
3. i-1번째까지의 포도주를 마시는 경우
-> dp[i-1]

위의 경우의 수에서 최댓값을 추가한다.

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

const n = arr.shift();
const dp = new Array(10000).fill(0);
dp[0] = arr[0];
dp[1] = arr[0] + arr[1];
dp[2] = Math.max(dp[1], arr[2] + arr[1], arr[2] + arr[0]);

for (let i = 3; i < n; i++) {
  dp[i] = Math.max(dp[i - 1], arr[i] + arr[i - 1] + dp[i - 3], arr[i] + dp[i - 2]);
}

console.log(dp[n - 1]);

0개의 댓글