๐Ÿ’  BOJ/Class 3

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

์„ ๋‹ฌ 2023. 3. 27. 23:19
๋ฐ˜์‘ํ˜•

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

 

9461๋ฒˆ: ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด

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

www.acmicpc.net

 

๋ฌธ์ œ

์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‚ผ๊ฐํ˜•์ด ๋‚˜์„  ๋ชจ์–‘์œผ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ์ฒซ ์‚ผ๊ฐํ˜•์€ ์ •์‚ผ๊ฐํ˜•์œผ๋กœ ๋ณ€์˜ ๊ธธ์ด๋Š” 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)์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์ ํ™”์‹์ด ์ง๊ด€์ ์œผ๋กœ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ๊ณ ๋“ฑํ•™๊ต ๋“ฑ๋น„์ˆ˜์—ด ๋ฌธ์ œ ํ’€๋“ฏ์ด ์ผ๋‹จ ๋ƒ…๋‹ค ๊ทœ์น™์„ ์จ๋ดค๋‹ค

1๋ฒˆ = 1๋ฒˆ = 1

2๋ฒˆ = 1๋ฒˆ = 1

3๋ฒˆ = 2๋ฒˆ = 1

4๋ฒˆ = 1๋ฒˆ + 3๋ฒˆ = 1 + 1 = 2

5๋ฒˆ = 4๋ฒˆ = 2

-

6๋ฒˆ = 3๋ฒˆ + 5๋ฒˆ = 1 + 2 = 3

7๋ฒˆ = 1๋ฒˆ + 6๋ฒˆ = 1 + 3 = 4

8๋ฒˆ = 1๋ฒˆ + 7๋ฒˆ = 1 + 4 = 5

9๋ฒˆ = 4๋ฒˆ + 8๋ฒˆ = 2 + 5 = 7

10๋ฒˆ = 5๋ฒˆ + 9๋ฒˆ = 2 + 7 = 9

11๋ฒˆ = 6๋ฒˆ + 10๋ฒˆ3 + 9 = 12

-

n๋ฒˆ = (n-5)๋ฒˆ + (n-1)๋ฒˆ

 

+++) ํƒ€์ž… ํ˜•.. ์žŠ์ง€ ๋ง์ž! dp๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ํ›„๋ฐ˜๋ถ€๋กœ ๊ฐ€๋ฉด ์ˆ˜๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

ํŠน์ • ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋ผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด int ๋Œ€์‹  long long์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฒดํ™”ํ•˜์ž

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<long long> dp(101);
    dp[1] = 1;
    dp[2] = 1;
    dp[3] = 1;
    dp[4] = 2;
    dp[5] = 2;
    for(int i=6; i<=100; i++) {
        dp[i] = dp[i-5] + dp[i-1];
    }
    
    int t, n;
    cin >> t;
    while(t--) {
        cin >> n;
        cout << dp[n] << "\n";
    }

    return 0;
}
๋ฐ˜์‘ํ˜•