๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 11052๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 11052๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ - C++

.23 2021. 8. 3. 21:19
๋ฌธ์ œ

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

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

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

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

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

์˜ˆ๋ฅผ ๋“ค์–ด, ์นด๋“œํŒฉ์ด ์ด 4๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๊ณ , P1 = 1, P1 = 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๊ฐœ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


DP๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ..์ด๊ธฐ ์ „์— ๋ฌธ์ œ ์–‘์— ์••๋„๋‹นํ•˜๋Š” ๋ ˆ์ „๋“œ ๊ธธ์ด ๋ฌธ์ œ

i = (i - j) + j (0 ≤ j ≤ i)๋ฅผ ์ด์šฉํ•˜์—ฌ, i๊ฐœ์˜ ์นด๋“œ๋ฅผ i์›์— ์‚ฌ๋Š” ๊ฒƒ์ด ๋” ์‹ผ์ง€, (i - j)๊ฐœ์˜ ์นด๋“œ๋ฅผ ์‚ฌ๋†“๊ณ  ๊ฑฐ๊ธฐ์— j๊ฐœ์˜ ์นด๋“œ๋ฅผ j์›์— ์‚ฌ๋Š” ๊ฒƒ์ด ๋” ์‹ผ์ง€ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ
#include <cstdio>
#include <vector>

using namespace std;

int DP(int n);

int main(void) {
    int n;
    scanf("%d", &n);
    printf("%d\n", DP(n));
    return 0;
}

int DP(int n) {
    vector<int> card(n + 1);
    vector<int> price(n + 1, 0);
    for(int i = 1; i <= n; i++) scanf("%d", &card[i]);

    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= i; j++) {
            price[i] = (price[i] > price[i - j] + card[j] ? price[i] : price[i - j] + card[j]);
        }
    }

    return price[n];
}
Comments