Algorithm

[백준] 쉬운 계단 수 10844번 (c++)

salmon16 2021. 12. 15. 11:19

출처 : 10844번: 쉬운 계단 수 (acmicpc.net)

 

10844번: 쉬운 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

풀이 방법

계단 수는 +1 또는 -1 차이가 난다.

dp[i][j]를 i자리 수 이면서 j로 시작하는 수로 잡는다

그러면 dp[i][j] = dp[i-1][j+1] + dp[i-1][j-1] 이 된다

주의할 점은 j가 0이면 1로 시작하는 수만 와야하고 j가 9면 8로 시작 한느 수만 올 수 있어

예외 처리를 해주면 된다.

 

//11057
#include <bits/stdc++.h>
using namespace std ;
int n;
vector<int> num;
long long dp[101][10];
long long ans = 0;

void solve() {
    for (int i = 2;i < n + 1;i++) {
        for (int j = 1;j < 9;j++) {
            dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1]) % 1000000000;
        }
        dp[i][0] = dp[i-1][1] % 1000000000;
        dp[i][9] = dp[i-1][8] % 1000000000;
    }
}
int main () {
    memset(dp, 0, sizeof(dp));
    for (int i = 0;i < 10;i++) {
        dp[1][i] = 1;
    }
    cin >> n;
    solve();
    for (int i = 1;i < 10;i++) {
        ans += dp[n][i] ;
    }
    cout << ans % 1000000000 << endl;
    return 0;
}