[BOJ 10844] 쉬운 계단수 (java)

1 minute read

:pencil2: 문제 링크

문제풀이

package basics_400;

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

public class BOJ10844 {
	//자료형 범위 신경쓰기 

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());

		// memo[i][j] = 길이 i, 마지막수 j인 계단수 갯수
		long memo[][] = new long[n+1][10];
		long sum = 0;

		//1자리수일때 초기화 
		memo[1][1] = 1;
		memo[1][2] = 1;
		memo[1][3] = 1;
		memo[1][4] = 1;
		memo[1][5] = 1;
		memo[1][6] = 1;
		memo[1][7] = 1;
		memo[1][8] = 1;
		memo[1][9] = 1;

		// 길이가 2 이상인 수
		for(int i=2;i<=n;i++) {
			//마지막 자리수(0~9)
			for (int j = 0; j <= 9; j++) {
				if (j == 0) //마지막수가 0일때는 큰 계단수만 고려하면 됨 
				{
					memo[i][j] = (memo[i - 1][j + 1])% 1000000000;	
				}
				else if (j == 9) {//마지막 수가 9일때는 작은 계단수만 고려하면 됨 
					memo[i][j] = (memo[i - 1][j - 1])% 1000000000;
				}
				else { //0,9가 아닐때는 작은 계단수, 큰 계단수 둘다 고려해줘야함 
					memo[i][j] = (memo[i - 1][j - 1] + memo[i - 1][j + 1])% 1000000000;
				}
			}
		}

		
		//길이 n의 모든 계단수 
		for (int k = 0; k <= 9; k++) {
			sum += memo[n][k];
		}
		
		System.out.println(sum%1000000000);

	}

}

자소서쓰고 면접보고 정처기 공부하고 이것저것 하느라 제일 중요한 안드랑 알고리즘 풀기가 미뤄졌었다 ㅠ

오랜만에 문제푸니까 가물가물하네 ^ㅡ^.. 너무너무 아쉽지만 더 분발해야겠다. 다시 정신차리고 힘내자 !

Comments