[λ°±μ€€] 10844 μ‰¬μš΄ 계단 수 - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°

2024. 9. 1. 00:30Β·πŸ’» Algorithms/λ°±μ€€

[ 문제링크 ]

https://www.acmicpc.net/problem/10844

 

🚩 쑰건

  1. 계단 μˆ˜λŠ” 45656처럼 μΈμ ‘ν•œ λͺ¨λ“  자리의 차이가 1인 수λ₯Ό λœ»ν•¨
  2. N이 μ£Όμ–΄μ§ˆ λ•Œ, 길이가 N인 계단 μˆ˜κ°€ 총 λͺ‡ 개 μžˆλŠ”μ§€ ꡬ해라
  3. κ·Έκ±Έ 1,000,000,000으둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό 좜λ ₯해라

 

 

🚩 μ ‘κ·Ό

ν˜„μž¬ 자리의 μˆ˜κ°€ 1이면, 뒀에 올 수 μžˆλŠ” μˆ˜λŠ” 0κ³Ό 2이닀. 0κ³Ό 9λΌλŠ” μ˜ˆμ™Έκ°€ μžˆμ§€λ§Œ 0~9κΉŒμ§€μ˜ μˆ˜λŠ” λͺ¨λ‘ λΉ„μŠ·ν•œ 양상을 λˆλ‹€. κ·Έλž˜μ„œ 점화식을 μ„ΈμšΈ 수 μžˆμ§€ μ•Šμ„κΉŒ? -> DP

 

 

🚩 μ‹œν–‰μ°©μ˜€

 μ ν™”식을 μ°Ύμ•„λ‚΄λŠ” 데 ꡉμž₯히 λ§Žμ€ μ‹œκ°„μ„ λ“€μ˜€λ‹€.. D[i]λ₯Ό i 뒀에 λ‚˜μ˜¬ 수 μžˆλŠ” 수 개수둜 놔둬보기도 ν•˜κ³ , F[i]λŠ” 길이가 i인 0으둜 μ‹œμž‘ν•˜λŠ” 것도 ν¬ν•¨ν•œ 계단 수/D[i]λŠ” 0으둜 μ‹œμž‘ν•˜λŠ” 계단 수 둜 λ†”λ‘¬μ„œ 빼보기도 ν•˜κ³ ..γ…Ž

 μ–΄λ ΅λ‹€κ³  생각이 λ“  μ΄μœ λŠ” 0κ³Ό 9λŠ” λ‹€λ₯Έ μˆ˜μ™€ λ‹€λ₯Έ 양상을 보이기 λ•Œλ¬Έμ΄μ—ˆλŠ”λ°, κ·Έλž˜μ„œ DλΌλŠ” ν…Œμ΄λΈ”μ€ 길이뿐만 μ•„λ‹ˆλΌ μ‹œμž‘ν•˜λŠ” μˆ˜μ— λŒ€ν•œ 정보도 포함해야 ν•œλ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. κ·Έλž˜μ„œ 길이가 iκ³  j둜 μ‹œμž‘ν•˜λŠ” 계단 수의 개수λ₯Ό μ €μž₯ν•˜λŠ” D[i][j]λΌλŠ” ν…Œμ΄λΈ”μ„ μ •μ˜ν–ˆλ‹€.

 

그리고 μ΄ˆκΈ°κ°’μœΌλ‘œ iκ°€ 1, 2일 λ•Œ 0~9의 j에 λŒ€ν•΄ λ¬Έμ œμ—μ„œ μ£Όμ–΄μ§„λŒ€λ‘œ μ„€μ •ν•΄μ£Όμ—ˆκ³ , 이후 점화식을 계산할 λ•Œ jκ°€ 0 λ˜λŠ” 9일 경우 0이 λ˜λ„λ‘ μ˜ˆμ™Έμ²˜λ¦¬? ν•΄μ£Όμ—ˆλ‹€.

그리고 μ˜€λ²„ν”Œλ‘œμš° λ°©μ§€λ₯Ό μœ„ν•΄ 계산 쀑간쀑간에 1,000,000,000에 λŒ€ν•œ % 연산을 ν•΄μ£Όμ—ˆλ‹€.

 

λ‚œ 이 풀이가 λ­”κ°€ λΉ„νš¨μœ¨μ μ΄λΌ μƒκ°ν•΄μ„œ ν’€κ³ λ‚œ ν›„ λ‹€λ₯Έ 풀이λ₯Ό μ°Ύμ•„λ΄€λŠ”λ°, 이 풀이가 λŒ€λΆ€λΆ„μ΄μ—ˆλ‹€..

 

 

πŸ’» μ½”λ“œ (C++)

#include <iostream>
using namespace std;

int D[101][10];    //1-indexed, 0-indexed
int sum;

int main(){
    for(int i=0; i<10; i++){
        if(i==0){
            D[1][i]=0;
            D[2][i]=1;
        }else if(i==9){
            D[1][i]=1;
            D[2][i]=1;
        }else{
            D[1][i]=1;
            D[2][i]=2;
        }
    }
    
    int n;
    cin>>n;
    
    for(int i=3;i<=n;i++){
        for(int j=0;j<10;j++){
            if(j==0)
                D[i][j]=0+D[i-1][j+1];
            else if(j==9)
                D[i][j]=D[i-1][j-1]+0; 
            else
                D[i][j]=D[i-1][j-1]+D[i-1][j+1]; 
            D[i][j]%=1000000000;
        }
    }
    
    for(int i=1;i<10;i++){
        sum+=D[n][i];
        sum%=1000000000;
    }
    cout<<sum;
}

'πŸ’» Algorithms > λ°±μ€€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€] 1929 μ†Œμˆ˜ κ΅¬ν•˜κΈ° - μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체  (0) 2024.09.15
[λ°±μ€€] 12865 ν‰λ²”ν•œ λ°°λ‚­ - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°  (0) 2024.09.01
[λ°±μ€€] 11727 2xn 타일링2 - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°  (0) 2024.08.31
[λ°±μ€€] 1932 μ •μˆ˜ μ‚Όκ°ν˜• - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°  (0) 2024.08.31
[λ°±μ€€] 1003 ν”Όλ³΄λ‚˜μΉ˜ ν•¨μˆ˜ - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°  (0) 2024.08.31
'πŸ’» Algorithms/λ°±μ€€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€] 1929 μ†Œμˆ˜ κ΅¬ν•˜κΈ° - μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체
  • [λ°±μ€€] 12865 ν‰λ²”ν•œ λ°°λ‚­ - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
  • [λ°±μ€€] 11727 2xn 타일링2 - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
  • [λ°±μ€€] 1932 μ •μˆ˜ μ‚Όκ°ν˜• - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
적끄
적끄
  • 적끄
    끄적
    적끄
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (30)
      • πŸ’» Algorithms (28)
        • λ°±μ€€ (22)
        • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
      • πŸ”Ž Deep Learning (0)
      • πŸ’₯ νŠΈλŸ¬λΈ”μŠˆνŒ… (1)
      • πŸ•Ή Unity (1)
      • πŸ₯” μž‰ν…… (0)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • Blog
    • Github
    • Velog
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
적끄
[λ°±μ€€] 10844 μ‰¬μš΄ 계단 수 - λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
μƒλ‹¨μœΌλ‘œ

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