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;
}'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| BOJ 11724๋ฒ : ์ฐ๊ฒฐ ์์์ ๊ฐ์ (C++/Silver 2) (0) | 2022.09.29 |
|---|---|
| BOJ 11726๋ฒ : 2รn ํ์ผ๋ง (C++/Silver 3) (0) | 2022.09.26 |
| BOJ 10816๋ฒ : ์ซ์ ์นด๋ 2 (C++, Python/Silver 4) (0) | 2022.09.18 |
| BOJ 1654๋ฒ : ๋์ ์๋ฅด๊ธฐ (C++/Silver 2) (0) | 2022.09.18 |
| BOJ 10815๋ฒ : ์ซ์ ์นด๋ (C++/Silver 5) (0) | 2022.09.16 |