-
[BOJ]11057: 오르막수 (C++)Algorithm 2023. 2. 1. 09:29
https://www.acmicpc.net/problem/11057
문제 요약
길이가 N인 오르막의 수를 10007로 나눈 나머지 출력
풀이
길이가 2인 오르막 수를 구하는데 마지막 숫자가 9인 것을 생각해보면, 09,19,29,...99 까지 세어준다. 그런데 09,19,...89까지의 개수는
마지막 숫자가 8의 갯수와 똑같다.
따라서 점화식은 dp[i][n] = dp[i-1][n] + dp[i][n-1] 이 되어야 한다.
위의 점화식에서 열의 크기는 길이를 뜻하므로 답을 구할 땐 result += dp[N][i]로 구해준다.
정답
#include <iostream> using namespace std; #define mod 10007 int dp[1001][10] = { 0, }; int main() { int n; cin >> n; for (int i = 0; i < 10; i++) dp[1][i] = 1; for (int i = 2; i <= n; i++) { for (int j = 0; j < 10; j++) { if (j == 0) { dp[i][0] = 1; continue; } dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]); dp[i][j] %= mod; } } int result = 0; for (int i = 0; i < 10; i++) result += dp[n][i]; cout << result % mod; return 0; }
'Algorithm' 카테고리의 다른 글
[Algorithm: BFS/DFS] 백준 7569 토마토 (C++) (0) 2023.02.13 [BOJ] 11052: 카드 구매하기(C++) (0) 2023.02.01 DFS & BFS 이해하기 (0) 2023.01.30 [Algorithm/C++] Baekjoon Online Judge 2293: 동전1 , 다이나믹 프로그래밍/배낭문제 (0) 2023.01.25 [Algorithm/c++] STL: Map, Hash_Map 알아보기 (0) 2023.01.24