https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
이 문제는 다이나믹 프로그래밍을 사용해 풀었다.
n이 1일 경우 한자리 이친수의 개수 = 1 (1)
n이 2일 경우 두 자리 이친수의 개수 = 1 (10)
n이 3일 경우 세 자리 이친수의 개수 = 2 (100, 101)
n이 4일 경우 네 자리 이친수의 개수 = 3 (1000, 1001, 1010)
n이 5일 경우 다섯 자리 이친수의 개수 = 5 (10000, 10001, 10010, 10100, 10101)
이렇게 작은 부분부터 풀어나가면 피보나치 수열임을 알 수 있다.
따라서, dp[n] = dp[n-1]+dp[n-2]가 된다.
#include <iostream>
using namespace std;
long long dp[91] = { 0, 1, 1 };
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
cout << dp[n];
return 0;
}
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[백준 #1931] 회의실 배정 (C++) (1) | 2021.08.30 |
---|---|
[백준 #9655] 돌 게임 (C++) (0) | 2021.08.29 |
[백준 #2217] 로프 (C++) (0) | 2021.08.27 |
[백준 #1037] 약수 (C++) (0) | 2021.08.26 |
[백준 #7662] 이중 우선순위 큐 (C++) (0) | 2021.08.25 |