백준/문제풀이_python
1904 01타일 _python
휴대용치즈
2022. 11. 14. 17:03
https://www.acmicpc.net/problem/1904
1904번: 01타일
지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이
www.acmicpc.net
메모리초과
문제 접근
각 테스트케이스를 순서대로 쓰나보니 패턴이 보였다.
1번: 1
2번: 00 11
3번: 001 100 111
4번: 0011 0000 1001 1100 1111
5번: 00001 00100 00111 10000 10011 11001 11100 11111
여기서 4번을 보면
2가지 경우로 나눠서 볼 수 있다.
3번의 001 100 111의 앞에 1이 붙는 경우 -> 1001 100 1111
2번의 00 11의 앞에 00이 붙는 경우 -> 0000 0011
이러면 총 5개다.
5번의 경우도 마찬가지로 3번의 경우에 00이 붙이거나 4번의 경우에 1을 붙이는 경우를 합하면 나온다.
그러면 점화식이 완성된다.
dp[n] = dp[n-1] + dp[n-2]
메모리초과가 발생한다면
출력에 15746을 잘 생각하고, 테스트케이스가 1000000이라면 어떨지 생각해보자.
코드
import sys
input = sys.stdin.readline
"""
"""
N = int(input())
dp = [1,2]
for i in range(2,N):
dp.append((dp[i-1]+dp[i-2])%15746)
print(dp[N-1])
408ms