dp식은 맞은데, 결과값이 틀리게 나오는 경우, 초기값이 문제인 경우입니다.
dp[2][1]이 얼마일까요? 이걸, 소스코드로 돌려보면 2가 나옵니다.
왜 그러냐면. 이게 계산될 때
dp[1][0] + dp [1][2] 이렇게 계산되기 때문이죠. 이거 문제될 거 없잖아요?
네. 맞습니다. 근데 dp[1][0]이 1인 게 문제죠.
코드 의도상, 수 k로 끝나는 '조건을 만족하는 n자리 수'의 갯수는 k-1로 끝나는 n-1자리 자릿수
+ k+1로 끝나는 n-1자리 자릿수 정도가 되겠지요?
이 아이디어로 접근하는 건 맞아보입니다만..
문제는, 0으로 시작하는 수가 없다는 것이죠. 그리고..
오버플로가 나지 않는가? 이것을 다시 한 번 점검해 보세요. 굳이 나머지 연산을 많이 하기 싫으시다면 long long형으로 선언하고 1000000000으로 mod 연산을 하심 되겠다만..
dp 식을 세우실 때 중요한 건 2개입니다.
(1) 초기식 잘 세우기. 예를 들어, 콤비네이션을 구하는 경우
iC0 = 1 // iCi = 1 이래 되겠죠. (물론 i>=1)
(2) 관계식 잘 세우기
이 둘 중에, 하나라도 제대로 하지 않으면 답이 틀리겠죠.
ahn4685 7년 전
어느 정도 참고하면서 작성을 하였습니다. 그런데 질문은
dp 구현하기 전에 직관적으로 이해하려고 할때는 수의 길이가 3일때는
101,121,123/ 210,212,232,234 / 321,323,343,345/ 432,434,454,456/ 543,545,565,567/ 654,656,676,678/ 765,767,787,789/ 876,879,898/ 987,989 이렇게 해서
끝의 자릿 수 하나씩 추가한다고 가정했을 때 0은 1개 2가 3개여야 되는데 저 코드 상으로 보면 0이 2 2가 4가 되어 나오는데 직관적으로 이해가 잘못된건가요?