Study/BOJ

BOJ 2193번 파이썬

루ㅌ 2020. 1. 30. 17:30

블로그 두번째로 올리는 글인데... 부지런하게 새로운 걸 올리려 하는데... 게을러서 이번에도 알고리즘 하나 풀었습니다.

 

이친수의 갯수를 구하는 문젠데

N 자리의 이친수의 갯수를 순서대로 나열하면

1

10

100, 101

1010, 1000, 1001

10000, 10100, 10010, 10101, 10001

...

 

위와 같은 식으로 가는데 여기서  

10

[(100), 101]

[(1010, 1000), 1001]

[(10000, 10100, 10010), 10101, 10001]

 

N-1에서 ()감싸진 0으로 끝나는 이친수가

N에선 1로 끝날 수 밖에 없겠죠? 왜냐하면 11과 같이 1이 연속되면 안되니까!

 

N-1에서 [] 감싸진 전체의 이친수에 대해선

N에선 0이 붙어도 상관없습니다. 왜냐하면 0은 ..10이든 ..00이든 상관없으니까요.

 

이렇게 풀었습니다...

 

 

def prinay_number_count(N):
    if N == 1 or N == 2:
        return 1
    else:
        next_step = 3
        count_0 = 1 
        count_1 = 1

        while(next_step <= N):
            temp = count_0
            count_0 = count_0 + count_1
            count_1 = temp
            next_step += 1
    
    return count_0

if __name__== '__main__':
    N = int(input())
    print(prinay_number_count(N))