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

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

[๋ฐฑ์ค€] 9461๋ฒˆ: ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด - C++ ๋ณธ๋ฌธ

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

[๋ฐฑ์ค€] 9461๋ฒˆ: ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด - C++

.23 2021. 8. 1. 10:34
๋ฌธ์ œ

์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‚ผ๊ฐํ˜•์ด ๋‚˜์„  ๋ชจ์–‘์œผ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ์ฒซ ์‚ผ๊ฐํ˜•์€ ์ •์‚ผ๊ฐํ˜•์œผ๋กœ ๋ณ€์˜ ๊ธธ์ด๋Š” 1์ด๋‹ค. ๊ทธ ๋‹ค์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ •์‚ผ๊ฐํ˜•์„ ๊ณ„์† ์ถ”๊ฐ€ํ•œ๋‹ค. ๋‚˜์„ ์—์„œ ๊ฐ€์žฅ ๊ธด ๋ณ€์˜ ๊ธธ์ด๋ฅผ k๋ผ ํ–ˆ์„ ๋•Œ, ๊ทธ ๋ณ€์— ๊ธธ์ด๊ฐ€ k์ธ ์ •์‚ผ๊ฐํ˜•์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด P(N)์€ ๋‚˜์„ ์— ์žˆ๋Š” ์ •์‚ผ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด์ด๋‹ค. P(1)๋ถ€ํ„ฐ P(10)๊นŒ์ง€ ์ฒซ 10๊ฐœ ์ˆซ์ž๋Š” 1, 1, 1, 2, 2, 3, 4, 5, 7, 9์ด๋‹ค.

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, P(N)์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100)

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค P(N)์„ ์ถœ๋ ฅํ•œ๋‹ค.


DP๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ.

์ƒ๊ฐ๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ฒŒ ๊ทœ์น™์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ๋‹ค. ๊ทธ๋ฆผ์— ์˜ํ•˜๋ฉด 1๋ถ€ํ„ฐ 11๊นŒ์ง€์˜ ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

P(1) = 1

P(2) = 1

P(3) = 1

P(4) = 2

P(5) = 2

P(6) = 1 + 2 = 3

P(7) = 1 + 3 = 4

P(8) = 1 + 4 = 5

P(9) = 2 + 5 = 7

P(10) = 2 + 7 = 9

P(11) = 3 + 9 = 12

...

 

์•„๋ฌด๋Ÿฐ ๊ทœ์น™ ์—†์ด ๋‚˜์—ด๋˜๋Š” 1~5๋ฒˆ์งธ ๊นŒ์ง€๋ฅผ ์ œ์™ธํ•˜๊ณ , 6๋ฒˆ์งธ๋ถ€ํ„ฐ ๊ทœ์น™์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ์ž์‹ ์˜ 5๋ฒˆ์งธ ์•ž ์ˆซ์ž์™€ ๋ฐ”๋กœ ์•ž ์ˆซ์ž๋ฅผ ๋”ํ•˜๋ฉด ์ž๊ธฐ ์ž์‹ ์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, P(6) = P(1) + P(5), ... , P(10) = P(5) + P(9), P(11) = P(6) + P(10) , ... ๋“ฑ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์ ํ™”์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

D[i] = D[i - 1] + D[i - 5] (i > 5)

 

1๋ฒˆ์งธ๋ถ€ํ„ฐ 5๋ฒˆ์งธ๊นŒ์ง€ ์ˆ˜๋Š” ์•„๋ฌด ๊ทœ์น™์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

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

using namespace std;
long DP(int num);
vector<long> memo(MAX, 0);

int main(void) {
    int t;
    scanf("%d", &t);
    for(int i = 0; i < t; i++) {
        int n;
        scanf("%d", &n);
        printf("%ld\n", DP(n));
    }
    return 0;
}

long DP(int num) {
    memo[1] = memo[2] = memo[3] = 1;
    memo[4] = memo[5] = 2;

    for(int i = 6; i <= num; i++) {
        memo[i] = memo[i - 1] + memo[i - 5];
    }

    return memo[num];
}
Comments