import sys
input = sys.stdin.readline
def BOJ2193() :
n = int(input())
dp = [[0 ,0] for _ in range(91)]
dp[1] = [0, 1]
dp[2] = [1, 0]
for i in range(3, 91) :
dp[i] = [sum(dp[i-1]), dp[i-1][0]]
print(sum(dp[n]))
BOJ2193()
접근 방법
1. 1은 연속될 수가 없다. 숫자를 이어 붙일수 있는 건 이전의 숫자에 영향을 받게되므로 dp를 이용하게 되었다.
2. dp 배열은 끝자리가 0, 1로 끝나는 수의 개수를 의미한다.
3. n 자리수에서 끝자리가 0이 되는 경우는 n-1 자리수의 합, 끝자리가 0이 되는 경우의 수는 n-1자리수에서 끝이 0으로 끝나는 숫자의 개수이다.
4. 3번의 내용을 점화식으로 작성하면 된다.
https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
퇴사 [백준 14501] - python (0) | 2022.03.10 |
---|---|
2xn 타일링 2 [백준 11727] - python (0) | 2022.03.09 |
쉬운 계단 수 [백준 10844] - python (0) | 2022.03.07 |
포도주 시식[백준 2156] - python (0) | 2022.03.06 |
연속합 [백준 1912] - python (0) | 2022.03.05 |