๋ฌธ์ |
๋ฌธ์
2รn ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ 1ร2, 2ร1 ํ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ ๊ทธ๋ฆผ์ 2ร5 ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ด ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. (1 โค n โค 1,000)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ 2รn ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด๊ณผ์ |
(1) ๊ท์น
๊ฐ๋ก๊ธธ์ด๋ก๋ง ๊ณ์ฐํ๋ฉด ๋๊ธฐ๋๋ฌธ์ ์ธ๋ก๊ฐ 2๋ ์ ๊ฒฝ์ฐ์ง ์์ต๋๋ค.
(2๋ (1x2 ํ์ผ), 1์(2x1 ํ์ผ) )
n=1 |
1 (1๊ฐ) |
n=2 |
2,11 (2๊ฐ) |
n=3 |
21,12,111 (3๊ฐ) |
n=4 |
211,121,112,22,1111 (5๊ฐ) |
n=5 |
2111,1211,1121,1112,221,212,122,11111 (8๊ฐ) |
์ด์๊ฐ์ ๊ท์น์ผ๋ก ์งํ๋๋ฏ๋ก, ์ ํ์์ D[N] = D[N-1] + D[N-2] ๋ก ๊ตฌํ ์ ์์ต๋๋ค
(2) ์์
๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํ์ฌ D[N] = (D[N-1] + D[N-2]) %10007๋ฅผ ๊ฐ ๋ฐฐ์ด์ ์ ์ฅํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
(3) ์ฝ๋
#include <iostream> using namespace std; long long c; int memo[1001];//๋ฉ๋ชจ์ด์ ์ด์
int main() { int n; cin >> n; memo[1] = 1; for (int i = 2; i <= (n+1); i++) memo[i] = (memo[i - 1] + memo[i - 2])%10007; cout << memo[(n+1)] << endl;//1๋ถํฐ ์์ํ์ผ๋ฏ๋ก return 0; } | cs |