티스토리 뷰

https://www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net

const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");


const wines = arr.map(v=>+v);



//앞에 먹음          0  100  300   201  103  306  704
// 앞에 안먹음       0  100  200   101  302  205  702
// 앞에 앞에도안먹음  0  100  200   1    102  304  601

let Max = wines[0];
let drink = [[0,0,0],[0,0,0],[wines[0],wines[0],wines[0]]]
for(let i = 3; i<=wines.length+1; i++){
    drink.push([]);
    // 이전 와인 마셨을 때: 한칸 앞에서. 그 전에 마신 경우 제외 -> 3번연속 마심.
    drink[i][0] = Math.max(drink[i-1][1],drink[i-1][2])+wines[i-2];

    // 이전 와인 안마셨을 때: 두 칸 앞에서 제일 많이 마실 수 있었던 경우를 더함.
    drink[i][1] = Math.max(...drink[i-2])+wines[i-2];
    // 앞에 두번 다 안 마셨을 때. 3칸 앞에서 제일 많이 마실 수 있었던 경우를 더함.
    drink[i][2] = Math.max(...drink[i-3])+wines[i-2];
    const tempMax = Math.max(...drink[i]);
    if(tempMax>Max) Max = tempMax
}

// drink.forEach(v=>{
//     console.log(v);
// })

console.log(Max)

 앞에 계단 오르기랑 비슷하면서, 다른 문제. 

뭐가 다른지는 나중에 생각하기로 😄

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함