알고리즘(python)/기본

[Python]동적계획법 백준 1904

개발일기 2020. 1. 8. 10:55
반응형

   

문제

https://www.acmicpc.net/problem/1904


이 문제의 규칙을 살펴보면

n         수열

1            1

2            11,00

3            100,111,001

4            1100,0000,1001,1111,0011

5            10000,11100,00100,11001,00001,10011,11111,00111

...

n-2에 00을 붙이고 n-1에 1을 붙이면 n의 수열이 나오는것을 알수있다.

수열의 개수로 계산했을경우 f(n)=f(n-1)+f(n-2) 피보나치의 형태와 같다. 

나머지 계산이 아닌 일반적인 계산으로 1000000의 가짓수를 계산하면 컴퓨터가 멈추는 

모습을 볼수있었다....


1
2
3
4
5
6
7
8
9
10
11
n=int(input())
 
tail_list=[0 for _ in range(n+1)]
tail_list[1]=1
if n>1:
    tail_list[2]=2
    for i in range(3,n+1):
        tail_list[i]=(tail_list[i-1]+tail_list[i-2])%15746
 
print(tail_list[n]%15746)
 

cs


이렇게 각 계산마다 나머지 연산을 해주어 저장해주어야 한다.




반응형