하나씩 알아가기

[BOJ_2193] 이친수 본문

알고리즘

[BOJ_2193] 이친수

clearwater 2021. 1. 25. 21:39
728x90
반응형

n = int(input())

dp = [0 for _ in range(91)]

dp[1] = 1
dp[2] = 1

for i in range(3, n+1):
	dp[i] = dp[i-2] + dp[i-1]

print(dp[n])

0으로 시작하지 않으면서 11을 부분 문자열로 갖지 않는 수를 이친수라 합니다.

일단 낮은 차수의 항들을 수동으로 구해줍시다.

1 2 3 4
1 10 100
101
1000
1010
1001

 

첫번째 두번째 항을 주목해 보면

한자리 수 이친수에 01을 붙이고

두자리 수 이친수에 0을 붙이면

101, 100으로 세자리 수의 이친수가 되는 것을 발견할 수 있습니다. 

 

두자리 수 이친수에다가 01을 붙이고

세자리 수 이친수에 0을 붙이면

1001, 1000, 1010으로 네자리 수의 이친수가 만들어 집니다.

 

점화식을 구해보면

f(n) = f(n-2) + f(n-1)

입니다. 또 피보나치 수열이네요.

 

www.acmicpc.net/problem/2193

 

2193번: 이친수

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

www.acmicpc.net

 

728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ_1260] DFS와 BFS  (0) 2021.01.27
DFS와 BFS 파이썬 코드  (0) 2021.01.27
[BOJ_3085] 사탕 게임  (0) 2021.01.24
[BOJ_1476] 날짜 계산  (0) 2021.01.24
[BOJ_2309] 일곱 난쟁이  (0) 2021.01.24