반응형
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되
www.acmicpc.net
풀이 ) DP
문제에서 주어진 이친수는 01로 끝나거나 0으로 끝날 수 있다.
01로 끝나는 경우는 n-2자리 이친수의 뒤에 01을 붙인 경우로 볼 수 있고
0으로 끝나는 경우는 n-1자리 이친수의 뒤에 0을 붙인 경우로 볼 수 있다.
따라서 이 때의 점화식은 memo[n] = memo[n-1] + memo[n-2]의 꼴이 됨을 알 수 있다.
#include <cstdio>
#include <algorithm>
using namespace std;
long long memo[92] = {0, 1, 1, };
int main(void)
{
int n;
scanf("%d", &n);
for(int i = 3; i <= n; ++i)
memo[i] = memo[i-1] + memo[i-2];
printf("%lld\n", memo[n]);
}
착오 )
처음에는 끝이 아닌 앞을 보고 시작했었다.
그런데 이럴 경우 2자리 이상일 때 10으로 시작하기는 하지만
이후 3번째 자리부터는 0으로 시작할 수 있기 때문에 이전에 구한 값을 이용할 수 없어서 불가능했다.
반응형
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 - 11726 : 2 x n 타일링 (0) | 2020.03.14 |
---|---|
[C++] 백준 - 1904 : 01타일 (0) | 2020.03.13 |
[C++] 백준 - 1463 : 1로 만들기 (0) | 2020.03.13 |
[C++] 백준 - 10973 : 이전 순열 (0) | 2020.03.12 |
[C++] 백준 - 10972 : 다음 순열 (0) | 2020.03.12 |