백준

백준 1904 - 01타일

황태건 2023. 5. 4. 13:36

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

 

1904번: 01타일

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

www.acmicpc.net

동적 프로그래밍을 사용하여 푼다.

 

길이 i의 타일을 만들 수 있는 경우의 수를 tile[i]이라고 할 때,

tile[i]은 다음과 같이 계산할 수 있다.

tile[i] = (tile[i-1]에 1을 추가하는 경우의 수) + (tile[i-2]에 00을 추가하는 경우의 수)

tile[i-2]에 11을 추가하는 경우는 중복되므로 제외한다.

 

결국 추가하는 경우의 수를 어떻게 계산하느냐가 문제의 핵심인데,

여러 경우를 확인하다가 다소 허무한 방식으로 답을 얻었다.

tile[1]부터 tile[5]까지의 값은 1, 2, 3, 5, 8이다.

굳이 값을 더 확인해보지 않아도 피보나치 수열을 이용하는 문제일 것이라는 느낌이 와서 그대로 답을 제출했다.

 

tile[i-1]과 tile[i-2]에서 1과 00 타일을 추가할 때,

굳이 여러 위치에 넣을 필요 없이 현재 배열의 맨 뒤에만 삽입하면

tile[i]의 모든 경우의 수를 얻을 수 있었다.

 

배운 내용 :

문제가 복잡해보일 때는

직관을 따라간 다음 이를 논리적으로 해석하는 방법이 나을 수 있다.