๋ฐ์ํ
๋ฌธ์ |
https://www.acmicpc.net/problem/9095
ํ์ด๊ณผ์ |
(1) ๊ท์น
์ ์n์ 1,2,3์ ์กฐํฉ์ด ๋ช๊ฐ ๋ค์ด๊ฐ๋์ง ํ์ธํฉ๋๋ค.
n=1 |
1 (1๊ฐ) |
n=2 |
11,2 (2๊ฐ) |
n=3 |
111,21,12,3 (4๊ฐ) |
n=4 |
1111,112,121,211,22,13,31 (7๊ฐ) |
n=5 | 11111,2111,1211,1121,1112,221,212,122,311,131,113,32,23 (13๊ฐ) |
์ด์๊ฐ์ ๊ท์น์ผ๋ก ์งํ๋๋ฏ๋ก, ์ ํ์์ D[N] = D[N-1] + D[N-2] + D[N-3] ๋ก ๊ตฌํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํ์ฌ ํด๊ฒฐํฉ๋๋ค.
(2) ์์
T์ ์ ์n์ ์ ๋ ฅ๋ฐ๊ณ , ๋ฉ๋ชจ์ด์ ์ด์ ์ ๊ฐ์ ์ ์ฅํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
(3) ์ฝ๋
#include <iostream> #include <list> using namespace std; int memo[12]; int main() { long long T; list<int> v; cin >> T; while (T--) { int t; cin >> t; v.push_back(t); } memo[1] = 1; memo[2] = 2; memo[3] = 4; while (!v.empty()) { for (int i = 4; i <= v.front(); i++) { memo[i] = memo[i - 1] + memo[i - 2] + memo[i - 3]; } cout << memo[v.front()] << endl; v.pop_front(); } return 0; } | cs |
๋ฐ์ํ
'๐ค PS(Problem Solving) > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11057๋ฒ - ์ค๋ฅด๋ง ์ (0) | 2019.07.07 |
---|---|
[๋ฐฑ์ค] 10844๋ฒ - ์ฌ์ด ๊ณ๋จ ์ (0) | 2019.07.05 |
[๋ฐฑ์ค] 11727๋ฒ - 2รn ํ์ผ๋ง2 (0) | 2019.07.01 |
[๋ฐฑ์ค] 11726๋ฒ - 2รn ํ์ผ๋ง (0) | 2019.07.01 |
[๋ฐฑ์ค] 1463๋ฒ - 1๋ก ๋ง๋ค๊ธฐ (0) | 2019.06.30 |