๐Ÿ’ป

[๋ฐฑ์ค€] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 11052. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 11052. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ

๋˜ํšจ๋‹ˆ 2020. 3. 27. 14:44

๋ฌธ์ œ

์š”์ฆ˜ ๋ฏผ๊ทœ๋„ค ๋™๋„ค์—์„œ๋Š” ์Šคํƒ€ํŠธ๋งํฌ์—์„œ ๋งŒ๋“  PS์นด๋“œ๋ฅผ ๋ชจ์œผ๋Š” ๊ฒƒ์ด ์œ ํ–‰์ด๋‹ค.

PS์นด๋“œ๋Š” PS(Problem Solving)๋ถ„์•ผ์—์„œ ์œ ๋ช…ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์•„์ด๋””์™€ ์–ผ๊ตด์ด ์ ํ˜€์žˆ๋Š” ์นด๋“œ์ด๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ์—๋Š” ๋“ฑ๊ธ‰์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ‰์ด ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด 8๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์ „์„ค์นด๋“œ
  • ๋ ˆ๋“œ์นด๋“œ
  • ์˜ค๋ Œ์ง€์นด๋“œ
  • ํผํ”Œ์นด๋“œ
  • ๋ธ”๋ฃจ์นด๋“œ
  • ์ฒญ๋ก์นด๋“œ
  • ๊ทธ๋ฆฐ์นด๋“œ
  • ๊ทธ๋ ˆ์ด์นด๋“œ

์นด๋“œ๋Š” ์นด๋“œํŒฉ์˜ ํ˜•ํƒœ๋กœ๋งŒ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๊ณ , ์นด๋“œํŒฉ์˜ ์ข…๋ฅ˜๋Š” ์นด๋“œ 1๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์นด๋“œํŒฉ, ์นด๋“œ 2๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์นด๋“œํŒฉ, ... ์นด๋“œ N๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์นด๋“œํŒฉ๊ณผ ๊ฐ™์ด ์ด N๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋ฏผ๊ทœ๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์€ ํŒฉ์ด๋”๋ผ๋„ ๊ฐ€๊ฒฉ์ด ๋น„์‹ธ๋ฉด ๋†’์€ ๋“ฑ๊ธ‰์˜ ์นด๋“œ๊ฐ€ ๋งŽ์ด ๋“ค์–ด์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ๋ฏธ์‹ ์„ ๋ฏฟ๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฏผ๊ทœ๋Š” ๋ˆ์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์ง€๋ถˆํ•ด์„œ ์นด๋“œ N๊ฐœ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์นด๋“œ๊ฐ€ i๊ฐœ ํฌํ•จ๋œ ์นด๋“œํŒฉ์˜ ๊ฐ€๊ฒฉ์€ Pi์›์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์นด๋“œํŒฉ์ด ์ด 4๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๊ณ , P1 = 1, P2 = 5, P3 = 6, P4 = 7์ธ ๊ฒฝ์šฐ์— ๋ฏผ๊ทœ๊ฐ€ ์นด๋“œ 4๊ฐœ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ๋Œ“๊ฐ’์€ 10์›์ด๋‹ค. 2๊ฐœ ๋“ค์–ด์žˆ๋Š” ์นด๋“œํŒฉ์„ 2๋ฒˆ ์‚ฌ๋ฉด ๋œ๋‹ค.

P1 = 5, P2 = 2, P3 = 8, P4 = 10์ธ ๊ฒฝ์šฐ์—๋Š” ์นด๋“œ๊ฐ€ 1๊ฐœ ๋“ค์–ด์žˆ๋Š” ์นด๋“œํŒฉ์„ 4๋ฒˆ ์‚ฌ๋ฉด 20์›์ด๊ณ , ์ด ๊ฒฝ์šฐ๊ฐ€ ๋ฏผ๊ทœ๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ๋Œ“๊ฐ’์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, P1 = 3, P2 = 5, P3 = 15, P4 = 16์ธ ๊ฒฝ์šฐ์—๋Š” 3๊ฐœ ๋“ค์–ด์žˆ๋Š” ์นด๋“œํŒฉ๊ณผ 1๊ฐœ ๋“ค์–ด์žˆ๋Š” ์นด๋“œํŒฉ์„ ๊ตฌ๋งคํ•ด 18์›์„ ์ง€๋ถˆํ•˜๋Š” ๊ฒƒ์ด ์ตœ๋Œ“๊ฐ’์ด๋‹ค.

์นด๋“œ ํŒฉ์˜ ๊ฐ€๊ฒฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, N๊ฐœ์˜ ์นด๋“œ๋ฅผ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•ด ๋ฏผ๊ทœ๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. N๊ฐœ๋ณด๋‹ค ๋งŽ์€ ๊ฐœ์ˆ˜์˜ ์นด๋“œ๋ฅผ ์‚ฐ ๋‹ค์Œ, ๋‚˜๋จธ์ง€ ์นด๋“œ๋ฅผ ๋ฒ„๋ ค์„œ N๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๊ตฌ๋งคํ•œ ์นด๋“œํŒฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์นด๋“œ ๊ฐœ์ˆ˜์˜ ํ•ฉ์€ N๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000)

๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ์นด๋“œ N๊ฐœ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

4

1 5 6 7

 

์˜ˆ์ œ ์ถœ๋ ฅ1

10

 

์˜ˆ์ œ ์ž…๋ ฅ2

5

10 9 8 7 6 

 

์˜ˆ์ œ ์ถœ๋ ฅ2

50

 

์˜ˆ์ œ ์ž…๋ ฅ3

10

1 1 2 3 5 8 13 21 34 55

 

์˜ˆ์ œ ์ถœ๋ ฅ3

55

 

์˜ˆ์ œ ์ž…๋ ฅ4

10

5 10 11 12 13 30 35 40 45 47

 

์˜ˆ์ œ ์ถœ๋ ฅ4

50

 

์˜ˆ์ œ ์ž…๋ ฅ5

4

5 2 8 10

 

์˜ˆ์ œ ์ถœ๋ ฅ5

20

 

์˜ˆ์ œ ์ž…๋ ฅ6

4

3 5 15 16

 

์˜ˆ์ œ ์ถœ๋ ฅ6

18

 

์ƒ๊ฐ

๋ฌธ์ œ์—์„œ ์•Œ๋ก๋‹ฌ๋ก ๊ธ€์”จ๋ฅผ ๋จผ์ € ๋ณด๊ณ  ๋ญ์ง€ ํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ์— ๋ณ„๋กœ ์ค‘์š”ํ•œ ๋‚ด์šฉ์€ ์•„๋‹ˆ์—ˆ๋‹ค ใ…Žใ…Žใ…Ž

 

i          1   2   3   4

p[i]     1   5   6   7

 

d[i] : i๊ฐœ์˜ ์นด๋“œ๋ฅผ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€๋ถˆํ•ด์•ผํ•˜๋Š” ์ตœ๋Œ€ ๊ธˆ์•ก

 

1. d[1] = 1

1๊ฐœ์˜ ์นด๋“œ๋กœ ์นด๋“œ 1๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ p[1]

 

2. d[2] = d[1] + p[1] , d[2]

1๊ฐœ์˜ ์นด๋“œ๋กœ ์นด๋“œ 2๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ p[1] + d[1]

2๊ฐœ์˜ ์นด๋“œ๋กœ ์นด๋“œ 2๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ p[2]

 

3. d[n]

1๊ฐœ์˜ ์นด๋“œ๋กœ ์นด๋“œ n๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ p[1] + d[n-1]

2๊ฐœ์˜ ์นด๋“œ๋กœ ์นด๋“œ n๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ p[2] + d[n-2]

...

n๊ฐœ์˜ ์นด๋“œ๋กœ ์นด๋“œ n๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ p[n]

 

i, j ์ธ๋ฑ์Šค 2๊ฐœ๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int n;
int p[10001];
int d[1001];
 
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> n;
 
    for(int i=1; i<=n; i++){
        cin >> p[i];
    }
    
    for(int i=1; i<=n; i++){
        for(int j=1; j<=i; j++){
            d[i] = max(d[i], d[i-j] + p[j]);
        }
    }
 
    cout << d[n] << "\n";
    return 0;
}
Colored by Color Scripter

 

๋ฐ˜์‘ํ˜•
Comments