반응형
Notice
Recent Posts
Recent Comments
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

UP

[백준 2193 : PYTHON] 이친수 본문

알고리즘/DP

[백준 2193 : PYTHON] 이친수

cijbest 2021. 3. 10. 17:22

문제 풀기 : 2193번

 

2193번: 이친수

0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않

www.acmicpc.net

문제

이친수는

   1. 0과 1로만 이루어진 수

   2. 0으로 시작하지 않는다.

   3. 1이 두 번 연속으로 나타나지 않는다.

 

N(1 ≤ N ≤ 90)

 

N자리 이친수의 개수를 구하라.

 

문제풀이

n = 5 까지의 케이스를 찾아본다.

 

n = 4(하늘색 표시) 부터 살펴보면 n = 2와 n =3의 경우의 수가 다 들어가 있는 것을 볼 수 있다. → 10, 00, 01

n = 5(빨간색 표시) 부터 살펴보면 n = 3와 n =4의 경우의 수가 다 들어가 있는 것을 볼 수 있다. → 100, 101, 010, 000, 001

그러므로 점화식은 dp[i] = dp[i-1] + dp[i-2] 이 된다.

 

* dp는 최적의 경우의 수를 저장하는 테이블이다.

 

전체코드

import sys
input = sys.stdin.readline

n = int(input())

# n 자리 수 만큼 dp 테이블 생성 => n+1
dp = [0] * (n + 1)
dp[1] = 1

# dp 점화식
# 경우의 수를 따져보면 피보나치 수열과 비슷한 형태를 띄고 있음
for i in range(2, n+1):
    dp[i] = dp[i-2] + dp[i-1]

print(dp[n])
반응형
Comments