동적 계획법 예제 - 5

문제 분석

  • 만약 N번째의 길이에서 5로 끝나는 계단수가 있었을 때 이 계단수의 N - 1의 자리에 올 수 있는 5와 1 차이가 나는 4와 6이다.

  • 이러한 계단 수의 특성을 이용해 다음과 같이 정의할 수 있다.

    • D[N][H] = 길이가 N인 계단에서 H 높이로 종료되는 계단 수를 만들 수 있는 경우의 수

손으로 풀어보기

  1. 각 자릿수에 0 ~ 9 사이의 값이 들어오므로 높이에 따라 다른 점화식을 도출한다. 먼저 N에서 계단 높이가 0일 때 계단 수가 되려면 N - 1에서는 높이가 1이어야만 한다. N에서 계단 높이가 9일 때 계단 수가 되려면 N - 1에서는 높이가 8이어야만 한다. 나머지는 가운데 계단이므로 H + 1, H - 1 양쪽에서 계단 수를 만들 수 있다.

    • 높이에 따른 점화식

      • dp[i][H] = dp[i - 1][H + 1] (H = 0)

      • dp[i][H] = dp[i - 1][H - 1] (H = 9)

      • dp[i][H] = dp[i - 1][H + 1] + dp[i - 1][H - 1]

  2. dp 테이블의 값을 초기화한다. 각 높이에서 길이가 1인 계단 수는 모두 1가지이므로 1로 초기화한다.(dp[1][1~9] = 1) dp 테이블의 값을 채울 때마다 % 연산도 수행해 주어야 한다.

  3. dp[N][0] ~ dp[N][9]의 모든 값을 더한 값을 출력한다. 예를 들어 N = 2면, 2의 길이에서 0~9로 끝나는 모든 계단 수의 경우의 수를 출력할 수 있다. 이때도 % 연산을 수행해야 한다.

img_8.png

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated