1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>
using namespace std;
// ๋ผ์ด์ ๋ธ๋ก๊ทธ DP #2
#define MAX 100
#define LL long long
LL dp[MAX][2]={0};
void binary(int N){
if(N<2){
dp[0][0] = 0;
dp[1][0] = 0;
dp[1][1] = 1;
} else{
binary(N-1);
dp[N][0] = dp[N-1][0]+dp[N-1][1];
dp[N][1] = dp[N-1][0];
}
}
int main(){
// ๊ฑฐ๊พธ๋ก ์๊ฐ์ ํด์ dp[K][0]: K์๋ฆฌ ์ด์น์๊ฐ 0์ผ๋ก ๋๋ ๊ฒฝ์ฐ์ ์๋ K-1์๋ฆฌ๊ฐ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ์ K-1์ด 1๋ก ๋๋๋ ๊ฒฝ์ฐ ํฉ์น๊ฑฐ
// Long long ์จ์ฃผ๊ธฐ!!
int N;
cin >> N;
binary(N);
cout << dp[N][0]+dp[N][1] << endl;
}
|
cs |
1. 0์ผ๋ก ๋๋ ๊ฒฝ์ฐ์ ๋ค์ 0๊ณผ 1์ด ์ฌ ์ ์๋ค.
2. 1๋ก ๋๋ ๊ฒฝ์ฐ์ ๋ค์ 0๋ฐ์ ์ค์ง ๋ชปํ๋ค.
์ด ๋๊ฐ์ง์ ์๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ๊ณ , dp์ ์ฅ์ ์ธ ๋ฏธ๋ฆฌ ๊ตฌํด๋์ ๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฌ์ฉ์ ํ ์ค ์๋ค๋ฉด ํ ์ ์๋ ๋ฌธ์ ์๋ค.
์ฒ์์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ ๋, ์์ฒญ ๊ตฌ์ง๊ตฌ์ง(?)ํ๊ฒ dp๋ฅผ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ๊ฐ ๊ณ์ ๋ด๋ค.
ํ์ง๋ง ์ด ๋๊ฐ์ง์ ์๋ฆฌ๋ฅผ ๊ฑฐ๊พธ๋ก ์๊ฐํด๋ณด์. ๋ด๊ฐ ๊ตฌํด์ผ ํ๋ N๋ฒ์งธ ๊ฒฝ์ฐ์ ์๋ 0์ผ๋ก ๋๋๋ ์ ๋ค์ด๋ 1๋ก ๋๋๋ ์ ๋ค๋ก ๋๋ ์ ์๋ค. 0์ผ๋ก ๋๋๋ ์ ๋ค์ ๋ฐ๋ก ์ด์ ์ ์ ๊ฐ 0์ผ๋ก ๋๋๊ฑฐ๋ 1๋ก ๋๋ ๊ฒฝ์ฐ๋ฅผ ํฉํ ๊ฒฝ์ฐ์ ์๊ณ , 1๋ก ๋๋๋ ์ ๋ค์ ์ด์ ์ ์ ๊ฐ 0์ผ๋ก ๋๋ ๊ฒฝ์ฐ์ ์๋ ๋๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์ด ๋์ ํฉ์ณ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๊ทธ๋์ dp[MAX][2]๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , dp[N][0]์ N๋ฒ์งธ ์ด์น์๊ฐ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ์ ์, ์ฆ N-1๋ฒ์งธ ์ด์น์๊ฐ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ์ 1๋ก ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ํฉ์ณ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ dp[N][1]์ N๋ฒ์งธ ์ด์น์๊ฐ 1๋ก ๋๋๋ ๊ฒฝ์ฐ์ ์, ์ฆ N-1๋ฒ์งธ ์ด์น์๊ฐ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
boj >> 1931 ํ์์ค ๋ฐฐ์ (c++) (0) | 2020.04.13 |
---|---|
boj >> 17070 ํ์ดํ ์ฎ๊ธฐ๊ธฐ1 (0) | 2020.03.28 |