https://www.acmicpc.net/problem/1904
시간 0.75초, 메모리 256MB
input :
output :
조건 :
DP[i] = DP[i - 1] + DP[i - 2] 의 규칙을 가진다.
2n타일링 할 떄 와 같이.
이진수 1을 1개 추가하는 경우,
이진수 00을 추가하는 경우로 나뉜다.
이 문제에서 그냥 백만개 만들고, 나머지 계산을 나중에 하니.
메모리 초과, 시간 초과가 그냥 발생한다.
일단 메모리 줄이기 위해서 변수 2개만 저장해서 스왑 하듯 계산을 하자.
previous = 1
current = 2
temp = previous
previous = current
current = previous + temp
그런데. 나머지 계산에도 시간이 매우 소모되는 것 같다.
current = (previous + temp) % 15746을 하는 경우에는
1.86 2.11 초 사이가 나옴.
current = previous + temp 로 계산을 하고 마지막에 출력을 할 때 나머지를 구하면?
이런 차이가 생기니까 나머지 계산은 숫자를 계산 할 때 같이 하도록 하자.
정답 코드 :
import sys
n = int(sys.stdin.readline())
previous = 1
current = 2
for i in range(1, n):
temp = previous
previous = current
current = (current + temp) % 15746
print(previous)