728x90
https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
경우의 수를 나누는 기준만 잘 세우면 쉽게 풀 수 있는 문제입니다.
def solution(n):
# DP
memo = [0 for _ in range(91)]
# 앞 부분 미리 작성
memo[1] = 1
memo[2] = 1
i = 3
while True:
# 중단 조건
if i >= n+1:
return memo[n]
# 맨 앞은 10 으로 고정되어 있음
# 그 뒤를 생각해야 하는데, 시작이 1 인 경우와 0 인 경우로 나누어 생각해보자
# 시작이 1 인 경우는 단순히 n-2 자릿수를 가진 이친수와 같은 경우의 수를 가진다
# 시작이 0인 경우는 맨 앞이 1, 다음이 0 으로 고정되어 있다는 점을 생각해보면
# n-1 자릿수를 가진 이친수와 같은 경우의 수를 가진다는 것을 알 수 있다
# 즉 f(n) = f(n-1) + f(n-2) 이다
memo[i] = memo[i-1] + memo[i-2]
i += 1
n = int(input())
print(solution(n))
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 1912 <연속합> Python (1) | 2023.11.03 |
---|---|
백준 11055 <가장 큰 증가하는 부분 수열> Python (0) | 2023.11.03 |
백준 11727 <2Xn 타일링 2> Python (0) | 2023.11.02 |
백준 1932 <정수 삼각형> Python (1) | 2023.11.01 |
백준 12852 <1로 만들기 2> Python (1) | 2023.11.01 |