백준/Python

[백준] 1904 01타일 (python 파이썬)

노랑꼬리 2022. 11. 14. 14:54

문제링크: https://www.acmicpc.net/problem/1904

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이

www.acmicpc.net

 

작성코드

 

 

풀이

 

규칙을 알아보기 위해 우선 4까지 직접 작성해보자.

 

# dp[N]

 

dp[1] = 1

dp[2] = 00, 11

dp[3] = 001, 111, 100

dp[4] = 0011, 1111, 1001, 0000, 1100

 

일부러 규칙이 보이는 순서로 dp[4]를 작성하였다.

기존의 수열에서 다른 수를 뒤에 붙혀주면 서로 다름을 유지하면서 새로운 수가 완벽하게 생성된다.

 

1을 추가하는 경우와 00을 추가하는 경우를 생각할 수 있는데 1을 추가하기 위해서는 한칸이 필요하므로

dp[N-1]에서 붙혀주고 00을 추가하기 위해서는 dp[N-2]에서 붙혀준다.

 

이를 코드로 작성해보면 

 

이와 같이 나온다.

 

※ 이때 15746을 나눠주는 이유는 메모리에 들어가는 값이 너무 커지는 것을 방지하기 위해 문제 외적으로 백준에서 요구한 지정 값이다.