동적 계획법 예제 - 5
Last updated
Last updated
N(수의 길이)
dp[N][H] # 길이가 N일 때 높이 H(0~9)로 끝나는 계단 수의 모든 경우의 수)
for i 1~N:
dp[1][i] = 1
# 길이가 1일 때 높이 H로 끝나는 계단 수의 모든 경우의 수는 1개
for i 2~N:
dp[i][0] = dp[i - 1][1] # N에서 높이가 0이면 N-1에서는 높이가 1이어야만 계단 수 가능
dp[i][9] = dp[i - 1][8] # N에서 높이가 0이면 N-1에서는 높이가 8이어야만 계단 수 가능
for j 1~8:
# 높이가 1~8 이면 N-1에서 자신보다 한 단계 위 또는 한 단계 아래 높이에서 올 수 있음
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % 1_000_000_000
sum
for i 0~9:
sum에 dp[N][i]의 값을 더함
sum 출력N = int(input())
mod = 1_000_000_000
dp = [[0 for _ in range(10)] for _ in range(N + 1)]
for i in range(1, 10):
dp[1][i] = 1
for i in range(2, N + 1):
dp[i][0] = dp[i - 1][1]
dp[i][9] = dp[i - 1][8]
for j in range(1, 9):
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % mod
sum = 0
for i in range(0, 10):
sum = (sum + dp[N][i]) % mod
print(sum)import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int mod = 1_000_000_000;
long[][] dp = new long[N + 1][10];
for (int i = 1; i < 10; i++) {
dp[1][i] = 1;
}
for (int i = 2; i < N + 1; i++) {
dp[i][0] = dp[i - 1][1];
dp[i][9] = dp[i - 1][8];
for (int j = 1; j < 9; j++) {
dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1]) % mod;
}
}
long sum = 0;
for (int i = 0; i < 10; i++) {
sum = (sum + dp[N][i]) % mod;
}
System.out.println(sum);
}
}