๐ฃ ๋ฌธ์ ์ดํด
์์ ํ์๋ 2193๋ฒ ์ด์น์, 1904๋ฒ 01ํ์ผ ๊ณผ ์๋นํ ๋น์ทํ ๋ฌธ์ ์ด๋ค.
2×n ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ 1×2, 2×1 ํ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๋์ ๊ณํ๋ฒ(Dynamic Programming) ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๐ญ ํ์ด ๊ณผ์
| ๋ฅผ 2x1 ์ฌ๊ฐํ, == ๋ฅผ 1x2 ์ฌ๊ฐํ์ผ๋ก ๊ฐ์ ํ๊ฒ ๋ค.
N = 1 ์ธ ๊ฒฝ์ฐ 1๊ฐ์ง |
N = 2 ์ธ ๊ฒฝ์ฐ 2๊ฐ์ง | | , ==
N = 3 ์ธ ๊ฒฝ์ฐ 3๊ฐ์ง | | | , == | , | ==
N = 4 ์ธ ๊ฒฝ์ฐ 5๊ฐ์ง | | | | , == | | , | | == , | == | , == ==
์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ณํํ๋ค.
์ฌ๊ธฐ์ ๋ ๊ฐ์ง์ ๊ท์น์ ์ฐพ์ ์ ์์๋ค.
1) N-2 ๋ฒ์งธ ๊ฒฝ์ฐ์ ์์ N-1 ๋ฒ์งธ ๊ฒฝ์ฐ์ ์๋ฅผ ํฉํ ๊ฒ์ด N ๋ฒ์งธ ๊ฒฝ์ฐ์ ์๊ฐ ๋๋ค.
N-2 ๋ฒ์งธ ๊ฒฝ์ฐ๋ค์ ์ฐ์ธก์ == ๋ฅผ ๋ํ ๊ฒ๊ณผ N-1 ๋ฒ์งธ ๊ฒฝ์ฐ๋ค์ ์ฐ์ธก์ | ๋ฅผ ์ถ๊ฐํ ๊ฒ์ด N ๋ฒ์งธ ๊ฒฝ์ฐ๋ค์ด ๋์๋ค.
2) ๊ฒฐ๊ตญ ๊ฒฝ์ฐ์ ์๊ฐ ํผ๋ณด๋์น ์์ด๋ก ๋ณํ๋ค๋ ๋ง์ด๋ค.
๋ ์์ด๋์ด ๋ชจ๋ ์์ค์ฝ๋๋ ๋์ผํ๋ค.
์์ฑ ์ธ์ด: C++
#include <cstdio>
int dp[1010] = {0, };
void solve(int num){
dp[1] = 1; dp[2] = 2;
for (int i = 3; i <= num; ++i) {
dp[i] = ( dp[i-2] + dp[i-1] ) % 10007;
}
}
int main(){
int nLength;
scanf("%d", &nLength);
solve(nLength);
printf("%d\n", dp[nLength]);
return 0;
}
๐ ๋ฐฐ์ด ์
๋ฐ๋ก ์์ ํ์ด๋ณธ ๋ ๋ฌธ์ ์ ์ ํ์ด ์ ์ฌํด์ ๋ฌด๋ํ๊ฒ ํ์๋ ๋ฌธ์ ์ด๋ค.
๊ณ์ํด์ dp ๋ฌธ์ ๋ฅผ ์ ํ๋ค๋ณด๋, ์ด๋ค ์ ๋ต์ผ๋ก ํ์ด์ ์ ๊ทผ์ ํ ์ง ์ข ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค.