오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다.
예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다.
수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성하시오. 수는 0으로 시작할 수 있다.
3.초기값 설정하기
점화식을 구하면서 언급한 바와 같이 dp[1]의 모든 값은 1로 초기화 해줄 필요가 있다.
그리고 dp[i][0]값은 언제나 1이기 때문에 1로 초기화가 필요하다.
이를통해 dp테이블을 처음부터 1로 초기화를하면 된다는 사실을 알 수 있다.
N = int(input())
dp = [[1] * 10 for _ in range(1001)]
for i in range(2, N+1):
for j in range(1, 10):
dp[i][j] = (dp[i-1][j] + dp[i][j-1])
print(sum(dp[N])% 10007)
나에게 dp문제에서 제일 어려운 점을 꼽으라면 수학적사고를 통한 점화식 도출을 꼽을 수 있을 것 같다. 유튜브나 책을 찾아보아도 dp는 많은 문제를 접해보는 것이 좋다고 하는데 아직 많이 부족한가보다.
(이제까지 문제를 접한 방식이 너무 주먹구구식이었던것도 있지만)
그래도 긍정적인 부분은 문제를 봤을 때 dp문제라는 걸 이제는 직감할 수 있고 이 접근방식이 나에게 꽤 잘 맞는다고 생각했다. 1, 2, 3번을 따라서 생각을 정리하다보니 문제를 그래도 어찌저찌 풀긴 했다.
일단 문제 푸는 방식은 이대로 저 세가지 방식을 활용하고 다음부터는 시간제한을 좀 두는 방식도 도전해봐야겠다.