우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/JAVA

[JAVA] λ°±μ€€ 10844번 γ€μ‰¬μš΄ 계단 μˆ˜γ€‘

2022. 9. 6. 16:34


λ¨Όμ €, νŒ¨ν„΄μ„ μ°ΎκΈ° μœ„ν•΄ 경우의 수λ₯Ό μ‚΄νŽ΄λ³΄μž

 

 

0으둜 μ‹œμž‘ν•˜λŠ” μˆ˜λ„ 경우의 수λ₯Ό λ”°μ Έλ³΄μ•˜κ³ , κ²°κ³Όλ₯Ό 좜λ ₯ν•  λ•Œ λ”ν•΄μ£Όμ§€λ§Œ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ μ—†λ‹€.

 

λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μœ„ν•œ, Dp[자릿수][μ‹œμž‘ν•˜λŠ”μˆ˜] 둜 2차원 배열을 μ„ μ–Έν•΄μ€€λ‹€.


0으둜 μ‹œμž‘ν•˜λŠ” 경우


3자리수둜 λ§Œλ“  κ³„λ‹¨μ˜ 수λ₯Ό μ‚΄νŽ΄λ³΄λ©΄,

0으둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” 010 κ³Ό 012 κ°€ μžˆλ‹€.

 

0을 λ•Œμ–΄λ†“κ³  보면, 10 κ³Ό 12 μž„μ„ μ•Œ 수 있고 0으둜 μ‹œμž‘ν•˜λŠ” 3자리 계단 μˆ˜λŠ” 1둜 μ‹œμž‘ν•˜λŠ” 2자리 κ³„λ‹¨μ˜ μˆ˜μž„μ„ μ•Œ 수 μžˆλ‹€.

 

즉, 0으둜 μ‹œμž‘ν•˜λŠ” N자리 계단 μˆ˜λŠ” 1둜 μ‹œμž‘ν•˜λŠ” N-1자리 κ³„λ‹¨μ˜ μˆ˜μ™€ κ°™λ‹€. 

 

Dp[N][0]=Dp[N-1][1]

 

 


9둜 μ‹œμž‘ν•˜λŠ” 경우


3자리수둜 λ§Œλ“  κ³„λ‹¨μ˜ 수λ₯Ό μ‚΄νŽ΄λ³΄λ©΄,

 

9둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” 987 κ³Ό 989κ°€ μžˆλ‹€.

 

9λ₯Ό 떼어놓고 보면, 87κ³Ό 89μž„μ„ μ•Œ 수 있고 9으둜 μ‹œμž‘ν•˜λŠ” 3자리 계단 μˆ˜λŠ” 8둜 μ‹œμž‘ν•˜λŠ” 2자리 κ³„λ‹¨μ˜ μˆ˜μž„μ„ μ•Œ 수 μžˆλ‹€.

 

즉, 9으둜 μ‹œμž‘ν•˜λŠ” N자리 계단 μˆ˜λŠ” 8둜 μ‹œμž‘ν•˜λŠ” N-1자리 κ³„λ‹¨μ˜ μˆ˜μ™€ κ°™λ‹€.

 

Dp[N][9]=Dp[N-1][8]


2~8둜 μ‹œμž‘ν•˜λŠ” 경우


3자리수둜 λ§Œλ“  κ³„λ‹¨μ˜ 수λ₯Ό μ‚΄νŽ΄λ³΄λ©΄,

 

4둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” 432 434 454 456 이 있고

 

μ΄λŠ” 2자리수의 3으둜 μ‹œμž‘ν•˜λŠ” κ³„λ‹¨μ˜ 경우의 수 + 2자리수의 5둜 μ‹œμž‘ν•˜λŠ” κ³„λ‹¨μ˜ 경우의 μˆ˜κ°€ 됨을 μ•Œ 수 μžˆλ‹€.

 

즉, i(2~8)으둜 μ‹œμž‘ν•˜λŠ” N자리 계단 μˆ˜λŠ” [i-1둜 μ‹œμž‘ν•˜λŠ” N-1자리 κ³„λ‹¨μ˜ 수 λ”ν•˜κΈ° i+1둜 μ‹œμž‘ν•˜λŠ” N-1자리 κ³„λ‹¨μ˜ 수]와 κ°™λ‹€.

 

Dp[N][i] = Dp[N-1][i-1]+Dp[N-1][i+1]


κ²°κ³Ό


자릿수 N을 μž…λ ₯λ°›μœΌλ―€λ‘œ, Dp[N][0] ~ Dp[N][9] κΉŒμ§€ 경우의 수λ₯Ό λͺ¨λ‘ μ±„μš°κ³ , 

 

0으둜 μ‹œμž‘ν•˜λŠ” κ³„λ‹¨μˆ˜λŠ” μ—†λ‹€κ³  ν–ˆκΈ° λ•Œλ¬Έμ—, κ²°κ³ΌλŠ” Dp[N][1] λΆ€ν„° Dp[N][9] κΉŒμ§€ 더해주면 λœλ‹€!

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int N = scanner.nextInt();
		int mod = 1000000000;
		
		int[][] Dp = new int [N+1][10]; 
		
		for(int i=0;i<=9;i++) {
			Dp[1][i] = 1; //1자리 계단 수 
		}
		
		for(int i=2;i<=N;i++) {
			for(int j=0;j<=9;j++) {
				if(j==0) { //0으둜 μ‹œμž‘ν•˜λŠ” 계단 수
					Dp[i][j]=Dp[i-1][1]%mod;
				}
				else if(j==9) { //9둜 μ‹œμž‘ν•˜λŠ” 계단 수
					Dp[i][j]=Dp[i-1][8]%mod;
				}
				else { //2 ~ 8 둜 μ‹œμž‘ν•˜λŠ” 계단 수
					Dp[i][j]=(Dp[i-1][j-1]%mod+Dp[i-1][j+1]%mod)%mod;
				}
			}
		}
		int sum =0;
		for(int i=1;i<=9;i++) {// iλŠ” 1λΆ€ν„° μ‹œμž‘! 0으둜 μ‹œμž‘ν•˜λŠ” 경우의 수 κΉŒμ§€ 더해주면 μ•ˆλ¨!!
			sum+=Dp[N][i]; //N자리 1~9둜 μ‹œμž‘ν•˜λŠ” 경우의 수λ₯Ό λ‹€ ν•©ν•˜λ©΄ 됨.
            			  
			sum%=mod;
		}
		System.out.println(sum%mod);
	}
}

 

μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•  수 μžˆμœΌλ‹ˆ %modλ₯Ό 꼼꼼히 λ„£μ–΄μ£ΌλŠ”κ²Œ μ’‹λ‹€.

    'πŸ‘¨πŸ»‍πŸ’» PS/JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 2193번 γ€μ΄μΉœμˆ˜γ€‘
    • [JAVA] λ°±μ€€ 11057번 γ€μ˜€λ₯΄λ§‰ μˆ˜γ€‘
    • [JAVA] λ°±μ€€ 9095번 【1, 2, 3 λ”ν•˜κΈ°γ€‘
    • [JAVA] λ°±μ€€ 11727번 【2×n 타일링 2】
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”