공부 자료/알고리즘

(Python/파이썬) 백준 2193번 - 이친수

뚜루뚜루세니 2021. 8. 4. 10:24
728x90

문제출처: https://www.acmicpc.net/problem/2193

 

2193번: 이친수

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

www.acmicpc.net

1. 코드

1
2
3
4
5
6
7
8
9
10
11
12
#n이 0일때 0개
#n이 1일때 1개
#n이 2일때 1개
pinary =[0,1,1
 
for i in range(3,91):
    pinary.append(pinary[i-2]+pinary[i-1])
 
 
 
= int(input())
print(pinary[n])
cs

2. 해결과정

0으로 시작을 해서는 안되기 때문에 처음은 1이여야 하고, 1은 두번 연속으로 나타나지 않아야한다.

규칙을 찾아보면 예를 들어 n=5일때 이친수는 10/101, 10/100, 뒷자리 3자리는 n=3일때 숫자와 동일하고, 10/010,10/001,10/000은 뒷자리 3자리가 n=4일때 1뒤의 숫자와 동일하다는 것을 알 수 있다. 따라서 pinary[i-2]+pinary[i-1]이라는 점화식을 도출해낼 수 있다.

 

n=0일때 이친수는 0개

n=1일때 이친수는 1개

n=2일때 이친수는 10으로 1개이므로

pinary리스트에 미리 저장을 해두고 3부터 반복문을 돌려준다.

 

3. 느낀점

규칙만 찾으면 쉽게 풀 수 있었던 문제였다. dp가 어렵긴하다...

728x90