๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 9095๋ฒˆ : 1, 2, 3 ๋”ํ•˜๊ธฐ (C++/Silver 3)

devCloud 2022. 9. 23. 06:57
728x90
 

9095๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ

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

www.acmicpc.net

๋ฌธ์ œ

์ •์ˆ˜ 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
4
7
10

์˜ˆ์ œ ์ถœ๋ ฅ

7
44
274

ํ’€์ด

โ–ถ DP ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ : Top-Down๊ณผ Bottom-Up ๋ฐฉ์‹ ์ค‘ Bottom-Up ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉ

 

๋จผ์ € ๋ฌธ์ œ์˜ ๊ทœ์น™์„ ๋ณด์ž.

n = 1 n = 2 n = 3 n = 4 n = 5 ...
1 2
1+1
3
2+1
1+2
1+1+1
3+1
2+2
2+1+1
1+3
1+2+1
1+1+2
1+1+1+1
3+2
3+1+1
2+3
2+2+1
2+1+2
2+1+1+1
1+3+1
1+1+3
1+2+2
1+2+1+1
1+1+2+1
1+1+1+2
1+1+1+1+1
...
1๊ฐœ 2๊ฐœ 4๊ฐœ 7๊ฐœ 13๊ฐœ ...

 

n = 4์ผ๋•Œ, ํ•ฉ์˜ ์ด ๊ฐœ์ˆ˜๊ฐ€ 7๊ฐœ์ธ๋ฐ ์ด๋Š” ์•ž์˜ 1๊ฐœ + 2๊ฐœ + 4๊ฐœ(n = 1, 2, 3)๋ฅผ ๋”ํ•œ ํ•ฉ๊ณผ ๊ฐ™๋‹ค. ๊ทธ ๋‹ค์Œ n = 5์ผ ๋•Œ, ํ•ฉ์˜ ์ด ๊ฐœ์ˆ˜๊ฐ€ 13๊ฐœ์ธ๋ฐ ์ด ๋˜ํ•œ ์•ž์˜ 2๊ฐœ+4๊ฐœ+7๊ฐœ(n = 2, 3, 4)๋ฅผ ๋”ํ•œ ํ•ฉ๊ณผ ๊ฐ™๋‹ค. ์ด์ฒ˜๋Ÿผ n=4์ผ ๋•Œ๋ถ€ํ„ฐ ๊ทœ์น™์ด ์ƒ๊ธด๋‹ค. 

๋”ฐ๋ผ์„œ n์ด 1๋ถ€ํ„ฐ 3๊นŒ์ง€๋Š” ๋”ฐ๋กœ ๊ฐ’์„ ์ €์žฅํ•ด๋‘๊ณ , 4๋ถ€ํ„ฐ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค.

Solution

#include <iostream>
using namespace std;

int T, n, s[12];
int DP(int n){
    s[1] = 1; 
    s[2] = 2;
    s[3] = 4;
    for(int i = 4; i <= n; i++)
        s[i] = s[i - 1] + s[i - 2] + s[i - 3];
    return s[n];
}
int main() {
    cin >> T;
    for(int i=0; i<T; i++){
        cin >> n;
        cout << DP(n) << '\n';
    }
    return 0;
}
728x90