๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/๋ฐฑ์ค€] 9095 : 1, 2, 3 ๋”ํ•˜๊ธฐ

728x90

๋ฌธ์ œ

์ •์ˆ˜ 4๋ฅผ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์ด 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ์ˆ˜๋ฅผ 1๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์–‘์ˆ˜์ด๋ฉฐ 11๋ณด๋‹ค ์ž‘๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


 

๋ฐฑ์ค€ ์‹ค๋ฒ„ 3 ํ‹ฐ์–ด. DP ๋ฌธ์ œ์˜€๊ณ  DP๋Š” ์ ํ™”์‹์„ ์ฐพ๋Š”๊ฒŒ ํ•ญ์ƒ ์–ด๋ ต๋‹ค;

 

1์€ 1๋กœ๋งŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ. (1)

2๋Š” 1+1, 2๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ. (2)

3์€ 1+ (2์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜), 2+ (1์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜), 3 . (4)

 

4๋Š”

1+ (3์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜),

2+ (2์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜),

3+ (1์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)

 

5๋Š”

1+ (4์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜),

2+ (3์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜),

3+ (2์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)

 

๋”ฐ๋ผ์„œ 

 dp[j] = dp[j - 1] + dp[j - 2] + dp[j - 3] ๋ผ๋Š” ์ ํ™”์‹์ด ๋„์ถœ๋œ๋‹ค.
 

 

#include <iostream>
#include <vector>
using namespace std;
// ๋ฐฑ์ค€ 9095
int main(){
    int t;
    int n;
    cin >> t;
    int dp[11]={0,};
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 4;

    for (int i = 0; i < t; ++i) {
        cin >> n;
        for (int j = 4; j <= n; ++j){
            dp[j] = dp[j - 1] + dp[j - 2] + dp[j - 3];
        }
        cout << dp[n] << "\n";
    }
        return 0;
}
728x90