선생님 안녕하십니까
dp 2번째 강의를 듣고나서, 연습문제인 동물원을 풀다가 궁금한 점이 생겼습니다.
문제를 4시간정도 써서 풀어보려고 했습니다. 규칙이 찾아지고, 처음으로 dp 문제를 혼자 힘으로 풀었나해서 신나서 점화식이 정말 생각이 안나는 겁니다.
그래서 구글링을 해보았는데, 대부분 사자가 없을 경우, 왼쪽, 오른쪽에 있을 경우 세 가지를 나눠서 풀었습니다. 구글링을 하여 본 풀이들은 이해가 됐지만, 제 풀이도 맞았습니다로 만들고 싶어서 이렇게 질문드립니다. 점화식을 코드로 작성하진 못했지만, 제 풀이대로 하면 경우의 수가 구글링에서 한 풀이들과 답이 똑같았습니다.
7한테 접근할 수 있는 경우 : 1,2,3,4,6
dp[4][0] += dp[1][0] + dp[1][1] + dp[2][0] + dp[2][1] + dp[3][1]
-> 12
8한테 접근할 수 있는 경우 : 1,2,3,4,5
dp[4][1] += dp[1][0] + dp[1][1] + dp[2][0] + dp[2][1] + dp[3][0]
-> 12
그래서 dp배열을 나타내보면
1 1
2 2
5 5
12 12
입니다.
그리고 나서 dp배열의 모든 원소를 더해준 뒤 +1을 해줍니다.
여기서 +1은 사자가 한 마리도 없을 경우를 생각한 것입니다.
혹시 몰라서 n이 5일 때도 구글에서 맞은 코드를 가져와 시도해보았습니다.
위의 풀이와 이어서 dp[5][0]와 dp[5][1]이 각각 29가 나옵니다.
그렇다면 29 + 29 + 12 + 12 + 5 + 5 + 2 + 2 + 1 + 1 = 98이 나옵니다.
여기서 +1을 해주면 99로 같은 답이 나오게 됩니다.
제 풀이를 정리하면서 왜 이 풀이는 dp 풀이식으로 적절하지 않은가?
-
강의대로 dp[N][0] + dp[N][1] 을 더해야 값이 나와야 하는데 제 풀이는 모든 원소를 다 더해서 값을 구해야한다?
-
점화식을 만드려고 이것저것 다 해보았습니다.,, 정말 귀찮은게 아니라 공통점을 찾으려고 했는데도 이 경우가 맞으면 다른 경우가 안되고 그랬었습니다. 아무튼 점화식을 만들 수 없어서?
였습니다,,
꼭 혼자 풀고 싶어서 2~3일 잡고 있었는데, 이제 놓아주고 싶어서 이렇게 강사님께 여쭤봅니다,,
그리고 강사님도 해당 문제를 보고 구글 블로그들과 같이 사자가 없을 경우, 왼쪽, 오른쪽에 각각 있을 경우 세 가지로 나눠서 dp[n][0] dp[n][1] dp[n][2]로 푸셨는지 궁금합니다.
그리고 해당 문제는 계단 오르기로 뭔가 dp 첫번째 강의에서는 규칙성이 눈에 보여서 풀었는데 이번 dp 두번째 강의 중 계단 오르기 관련 연습문제들은 어떠한 특별한 경우를 잘 나눠서 거기 안에서 규칙성을 찾는 것이 포인트 같은데 제가 느낀 것이 맞는지 궁금합니다!!
읽어주셔서 감사합니다