0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다.
N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다.
첫째 줄에 N자리 이친수의 개수를 출력한다.
풀이
단순히 n=1부터 n=5일 때까지 경우의 수를 나열해 보면
n=1 | 1
n=2 | 10
n=3 | 100, 101
n=4 | 1000, 1010, 1001
n=5 | 10000, 10001, 10010, 10100, 10101
...
다음과 같고, 피보나치 수열처럼 dp[i] = dp[i-1]+dp[i-2]의 점화식을 갖는다
코드
import sys
n = int(sys.stdin.readline())
dp = [0]*(n+1)
dp[1] = 1
if n > 1:
dp[2] = 1
for i in range(3,n+1):
dp[i] = dp[i-1] + dp[i-2]
print(dp[n])