์ค๋ฒ3 : ๋์ ๊ณํ๋ฒ ๋ฌธ์ ์ด๋ค.
์๊ฐ
์ด ๋ฌธ์ ์ ํต์ฌ์, ์ต๊ณ ์๋ฆฌ ์ซ์๊ฐ 0 ๋๋ 1์ผ ๋์ ์ํฉ์ ๋ถ๋ฆฌํด์ ์๊ฐํด๋ณด๋ ๊ฒ์ด๋ค. ์ด์ ๋ ๋์ดํ๋ฉด ๊ธ๋ฐฉ ์์์ฐจ๋ฆด ์ ์๋ค.
| N | 1 | 2 | 3 | |||
|---|---|---|---|---|---|---|
| 0 | X | 00 | X | 000 | X | |
| 1 | O | 01 | X | 001 | X | |
| 10 | O | 010 | X | |||
| 11 | X | 011 | X | |||
| 100 | O | |||||
| 101 | O | |||||
| 110 | X | |||||
| 111 | X | |||||
| 1 | 1 | 2 |
์ฌ๊ธฐ์ N์ด 2 ์ผ ๋๋ฅผ ์๊ฐํด๋ณด๋ฉด, ์์๋ฆฌ์ 1์ด ์์ด์ผ ํ๊ณ , ๊ทธ ๋ค๋ 0์ผ๋ก ์์ํด์ผ ํ๋ค. 0์ผ๋ก ์์ํ ์ดํ์๋ ์ด์น์๊ฐ ์์ผํ๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ์ ์๋ก์ด ์ด์น์๊ฐ ๋ง๋ค์ด์ง๋ค. ๋ฐ๋ผ์ N์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ค์ ์๋ฆฌ์์ ์ด์น์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์ต๊ณ ์๋ฆฌ๊ฐ 0์ธ ์ํฉ์์ ๋ค์ ์ซ์๋ถํฐ ๊ฐ์ง๋ ์ด์น์๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋ค.
์ ์
dp[N][0] : N์๋ฆฌ์์ ์ต๊ณ ์๋ฆฌ๊ฐ 0์ผ ๊ฒฝ์ฐ ์ดํ ์๋ฆฌ์์์ ๊ฐ์ง ์ ์๋ ์ด์น์์ ๊ฐ์
dp[N][1] : N์๋ฆฌ์์ ์ต๊ณ ์๋ฆฌ๊ฐ 1์ผ ๊ฒฝ์ฐ ๊ฐ์ง ์ ์๋ ์ด์น์์ ๊ฐ์
์ ํ์
dp[N][0] = dp[N-1][0] + dp[N-1][1];
์ต๊ณ ์๋ฆฌ์๊ฐ 0์ผ ๋, ์์ ์ ์์ ๋ง๋ ๊ฐ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ๊ทธ ๋ค์ ์๋ฆฌ์ ์๊ฐ 1์ธ ๊ฒฝ์ฐ์, 0์ธ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ฐ๋ผ์ ๊ทธ ๋ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ๋ํด์ฃผ์ด์ผ ๋ด๊ฐ ์ํ๋ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
dp[N][1] = dp[N-1][0];
1์ธ ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด ๋ค์ ์๋ฆฌ์๊ฐ 0์ผ๋ก ์์ํ๋ ์ด์น์๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก ์์ ๊ฐ๋ค.
Code
// ์ค๋ฒ3 : ๋ฐฑ์ค 2193๋ฒ ์ด์น์
#include <iostream>
using namespace std;
int main(){
int N;
long long dp[91][2];
cin >> N;
dp[1][0] = 1;
dp[1][1] = 1;
for (int i = 2; i <= N; i++) {
dp[i][0] = dp[i-1][0] + dp[i-1][1];
dp[i][1] = dp[i-1][0];
}
cout << dp[N][1] << '\n';
}
ํผ๋ณด๋์น ์์ด
๊ทธ๋ฐ๋ฐ ์์ ์ ํ์์ ์ ์ ๋ฆฌํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ํผ๋ณด๋์น ์์ด์ ํํ๊ฐ ๋์จ๋ค.
๋ค์ด๋๋ฏน์ ๋์ด ์๋ค.