Algorithm/백준 알고리즘

백준_10844 쉬운 계단 수(자바) / DP

미스터로즈 2021. 4. 1. 19:43

시간 & 메모리 제한

문제

입력 & 출력

DP를 이용한 문제풀이

package com.Back;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Back_10844 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int Num = Integer.parseInt(br.readLine());
		long [][] dp = new long[Num+1][10] ;
		
		for (int i = 1; i < 10; i++) {
			dp[1][i]=1;
		}
		
		for (int i = 2; i <= Num; i++) {
			for (int j = 0; j < 10; j++) {
				if(j==0) dp[i][j] =dp[i-1][j+1]%1000000000;
				else if(j==9) dp[i][j] = dp[i-1][j-1]%1000000000;
				else dp[i][j] = (dp[i-1][j-1]+dp[i-1][j+1])%1000000000;
			}
		}
		
		long sum=0;
		for (int i = 0; i < 10; i++) {
			sum+=dp[Num][i];
		}
		System.out.println(sum %1000000000);
	}

}

- DP를 이용해서 문제를 풀었습니다.

 

- 문제의 접근 방법은

www.acmicpc.net/problem/11057

 

11057번: 오르막 수

오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수

www.acmicpc.net

이 문제와 비슷합니다.

 

- 점화식을 만들 때, 10의 일의자리는 더할수 밖에 없는 상황과 19의 일의자리는 뺄수 밖에 없는 상황만 고려하면 됩니다.

 

- 나머진 1을 더하고, 1을 빼는 방식으로 진행하면 문제를 풀 수 있습니다.

 

- 이 문제의 어려움을 겪었던 건, int가 담을 수 있는 값의 한계때문에 long으로 수정을 했습니다.