3개 이상의 타일일 때 맨 뒤에 올 수 있는 타일을 00과 1로 생각하시면 편합니다.
1 - 1
2 - 11
00
3 - 1 00
11 1
00 1
4 - 11 00
00 00
1 00 1
1 11 1
00 1 1
저도 점화식 도출을 못해서 단순하게 숫자 적으면서 숫자들 사이의 규칙을 느낌적으로 맞추면서 풉니다..
1904번 - 01타일
맨 뒤에 올 수 있는 타일을 기준으로 생각을 하면 편하다 라고 말씀해주셨는데
이 생각이 직관적으로 드신건가요? 맨 뒤의 타일만 보자라는 생각이 드는 것 자체가 문제를 해결하냐 못하냐같아서..
저는 먼저 첫째 자리부터 n번째 자리까지 00 또는 1을 배치하는 모든 경우의 수를 구하는 방법을 생각했습니다.
예를들어 n이 5라고 가정할 경우,
첫째 자리에 1을 대입할 경우 남은 자리는 5-1=4가 됩니다.
두번째 자리에 00을 대입할 경우 남은 자리는 4-2=2가 됩니다.(00은 두 자리를 차지하므로)
세번째 자리에 00을 대입할 경우 남은 자리는 2-2=0이 됩니다.
이제 남은 자리가 없으므로 1/00/00으로 배치 확정 후 하나의 경우의 수를 끝냅니다.
이런 식으로 각 자리에 1 또는 00을 배치하는 모든 경우의 수를 구해 나가면 문제의 해답을 찾을 수 있습니다.
위의 해법은 재귀함수를 이용하면 쉽게 코드로 표현할 수 있습니다.
이 때, 재귀함수의 내부를 잘 보시면 결국 f(n) = f(n-1) + f(n-2)와 같다는 것을 알 수 있습니다.
재귀함수를 이용한 해법은 너무 오래 걸리므로 대신 도출한 점화식을 이용하여 코드를 짜야 정답 처리가 됩니다.
이해하시기 편하게 재귀함수 코드를 첨부해놓았습니다. 혹시 코틀린 코드가 이해가 안되신다면, 메세지 주세요~
댓글을 작성하려면 로그인해야 합니다.
seok9211 4년 전 1
검색도 좀 해봤고, 글도 참고해봤는데 이해가 안되서 질문드립니다.
이 문제는 결과적으로
dp[i]=dp[i-1]+dp[i-2] 라는 식으로 해결이 가능하다고 합니다.
그리고 위 식은 중복을 고려하지 않아도 된다고 하구요.
왜 고려하지 않아도 되는지에 대한 설명이 없고 설명해주신게 있긴한것같은데 그것도 이해가 안되더라구요.
왜 이렇게 점화식을 짜도 맞는건지, 이런 점화식이 결과적으로 이렇다가 아니라 이러한 이유 때문에 이 점화식이 나온다
라는 느낌의 설명을 부탁드려도 될까요?
DP문제는 점화식을 못찾냐 찾냐의 문제인데 정말 쉬운거라는데도 규칙이 보이질 않아서 자괴감이 드네요;