2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
간단한 DP문제였다. 이친수의 규칙을 살펴보면 N이 1씩 증가할때 이친수 갯수의 수열은 피보나치 수열을 이룬다.
따라서, 점화식은 DP(N) = DP(N-1) + DP(N-2) 이며 이를 구현하면 원하는 결과를 얻을 수 있다.
#include <iostream>
using namespace std;
long long memo[91];
long long TopDown(int N)
{
if (N == 1 || N == 2) return 1;
long long& ret = memo[N];
if (ret != 0) return ret;
return ret = TopDown(N - 1) + TopDown(N - 2);
}
long long BottomUp(int N)
{
memo[1] = memo[2] = 1;
for (int i = 3; i <= N; i++)
memo[i] = memo[i - 1] + memo[i - 2];
return memo[N];
}
int main(void)
{
int N;
cin >> N;
// Top-Down
cout << "TopDown: " << TopDown(N) << endl;
// Bottom-Up
cout << "BottomUp: "<< BottomUp(N) << endl;
return 0;
}
알고리즘 200일 프로젝트 - 64 day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1912번: 연속합 (0) | 2020.06.09 |
---|---|
백준 2156번: 포도주 시식 (0) | 2020.06.09 |
백준 1932번: 정수 삼각형 (0) | 2020.06.08 |
백준 2579번: 계단 오르기 (0) | 2020.06.08 |
백준 1149번: RGB거리 (0) | 2020.06.08 |