πŸ’»

[λ°±μ€€] λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° - 2156. 포도주 μ‹œμ‹ λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄ Baekjoon

[λ°±μ€€] λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° - 2156. 포도주 μ‹œμ‹

λ˜νš¨λ‹ˆ 2020. 3. 20. 13:16

문제

νš¨μ£ΌλŠ” 포도주 μ‹œμ‹νšŒμ— κ°”λ‹€. κ·Έ 곳에 κ°”λ”λ‹ˆ, ν…Œμ΄λΈ” μœ„μ— λ‹€μ–‘ν•œ 포도주가 λ“€μ–΄μžˆλŠ” 포도주 μž”μ΄ 일렬둜 놓여 μžˆμ—ˆλ‹€. νš¨μ£ΌλŠ” 포도주 μ‹œμ‹μ„ ν•˜λ €κ³  ν•˜λŠ”λ°, μ—¬κΈ°μ—λŠ” λ‹€μŒκ³Ό 같은 두 가지 κ·œμΉ™μ΄ μžˆλ‹€.

  1. 포도주 μž”μ„ μ„ νƒν•˜λ©΄ κ·Έ μž”μ— λ“€μ–΄μžˆλŠ” ν¬λ„μ£ΌλŠ” λͺ¨λ‘ λ§ˆμ…”μ•Ό ν•˜κ³ , λ§ˆμ‹  ν›„μ—λŠ” μ›λž˜ μœ„μΉ˜μ— λ‹€μ‹œ 놓아야 ν•œλ‹€.
  2. μ—°μ†μœΌλ‘œ 놓여 μžˆλŠ” 3μž”μ„ λͺ¨λ‘ λ§ˆμ‹€ μˆ˜λŠ” μ—†λ‹€.

νš¨μ£ΌλŠ” 될 수 μžˆλŠ” λŒ€λ‘œ λ§Žμ€ μ–‘μ˜ 포도주λ₯Ό 맛보기 μœ„ν•΄μ„œ μ–΄λ–€ 포도주 μž”μ„ 선택해야 할지 κ³ λ―Όν•˜κ³  μžˆλ‹€. 1λΆ€ν„° nκΉŒμ§€μ˜ λ²ˆν˜Έκ°€ λΆ™μ–΄ μžˆλŠ” n개의 포도주 μž”μ΄ μˆœμ„œλŒ€λ‘œ ν…Œμ΄λΈ” μœ„μ— 놓여 있고, 각 포도주 μž”μ— λ“€μ–΄μžˆλŠ” ν¬λ„μ£Όμ˜ 양이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 효주λ₯Ό 도와 κ°€μž₯ λ§Žμ€ μ–‘μ˜ 포도주λ₯Ό λ§ˆμ‹€ 수 μžˆλ„λ‘ ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 

예λ₯Ό λ“€μ–΄ 6개의 포도주 μž”μ΄ 있고, 각각의 μž”μ— μˆœμ„œλŒ€λ‘œ 6, 10, 13, 9, 8, 1 만큼의 포도주가 λ“€μ–΄ μžˆμ„ λ•Œ, 첫 번째, 두 번째, λ„€ 번째, λ‹€μ„― 번째 포도주 μž”μ„ μ„ νƒν•˜λ©΄ 총 포도주 양이 33으둜 μ΅œλŒ€λ‘œ λ§ˆμ‹€ 수 μžˆλ‹€.

 

μž…λ ₯

첫째 쀄에 포도주 μž”μ˜ 개수 n이 주어진닀. (1≤n≤10,000) λ‘˜μ§Έ 쀄뢀터 n+1번째 μ€„κΉŒμ§€ 포도주 μž”μ— λ“€μ–΄μžˆλŠ” ν¬λ„μ£Όμ˜ 양이 μˆœμ„œλŒ€λ‘œ 주어진닀. ν¬λ„μ£Όμ˜ 양은 1,000 μ΄ν•˜μ˜ 음이 μ•„λ‹Œ μ •μˆ˜μ΄λ‹€.

 

좜λ ₯

첫째 쀄에 μ΅œλŒ€λ‘œ λ§ˆμ‹€ 수 μžˆλŠ” ν¬λ„μ£Όμ˜ 양을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1

6
6
10
13
9
8
1

 

예제 좜λ ₯1

33

 

생각

λ§Œμ•½μ— 포도주 μž”μ΄ 3κ°œμΌλ•Œ,

(1) 1번째 μž” + 2번째 μž” / (2) 1번째 μž” + 3번째 μž” / (3) 2번째 μž” + 3번째 μž”

μ΄λ ‡κ²Œ 3가지 κ²½μš°κ°€ λ‚˜μ˜¨λ‹€.

 

μž”μ΄ nκ°œμΌλ•Œ,

(1) n을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 경우 => d[n-1]

(2) n을 ν¬ν•¨ν•˜λŠ” 경우 =>  d[n-2] + wine[n],  d[n-3] + wine[n-1] + wine[n](연속 3개의 μž”μ€ κ³ λ₯Ό 수 μ—†μœΌλ―€λ‘œ)

 

즉, 세가지 κ²½μš°μ—μ„œ μ΅œλŒ“κ°’μ„ d[n]에 μ €μž₯ν•΄μ•Όν•˜λ―€λ‘œ

 

(1) d[n-1]

(2) d[n-2] + wine[n]

(3) d[n-3] + wine[n-1] + wine[n]

 

이λ₯Ό Bottom-Up λ°©μ‹μœΌλ‘œ for문을 μ‚¬μš©ν•˜μ—¬ ν’€μ—ˆλ‹€. 

 

계단 였λ₯΄κΈ° λ¬Έμ œμ™€ λΉ„μŠ·ν–ˆλ˜ κ±° κ°™λ‹€. 

2020/02/25 - [μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄] - [λ°±μ€€] λ™μ κ³„νšλ²• - 2579. 계단 였λ₯΄κΈ°

 

μž‘μ„±ν•œ μ½”λ“œ

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
32
33
34
35
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int wine[10001];
int d[10001];
int n;
 
int dp(int n){
    d[1= wine[1];
    d[2= wine[1+ wine[2];
   
    for(int i=3; i<=n; i++){
        int temp = max(d[i-1], d[i-2+ wine[i]);
        d[i] = max(temp, d[i-3+ wine[i-1+ wine[i]);
    }
    return d[n];
}
int main(int argc, const char * argv[]) {
    // insert code here...
 
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    cin >> n;
 
    for(int i=1; i<=n; i++){
        cin >> wine[i];
    }
 
    cout << dp(n) << "\n";
 
    return 0;
}
Colored by Color Scripter
λ°˜μ‘ν˜•
Comments