PS
[백준][dp] 11057 오르막수 c++구현
꽁이꽁설꽁돌
2024. 9. 26. 10:54
728x90
반응형
목차
https://www.acmicpc.net/problem/11057
문제
https://be-senior-developer.tistory.com/22
[백준][dp] 10844 쉬운 계단 수 c++ 구현
목차 https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 문제 구현 방향 다이나믹 프로그래밍의 방법 중 하나인 상향
be-senior-developer.tistory.com
문제 구현 방향
위의 문제와 굉장히 유사한 문제이다. 오랜만에 풀어서 감이 안잡혀서 위에 문제를 다시 보고 풀었다..
0 ~ 9까지를 따로 배열로 만들고 누적하는 식의 풀이 방법으로 풀어야 한다.
문제 풀이
0 1 2 3 4 5 6 7 8 9
1자리
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2자리
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
3자리
55 | 45 | 36 | 28 | 21 | 15 | 10 | 6 | 3 | 1 |
규칙이 보인다! 그 전 자리에서 누적한 것을 넣어주면 된다.
코드 구현
#include <iostream>
#include <vector>
#include<map>
#include<math.h>
#include <algorithm>
#include<stack>
using namespace std;
typedef long long ll;
ll dp[1001][1001] = {0};
int N;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
for (int i = 0; i <= 9; i++) {
dp[1][i] = 1;
}
cin >> N;
for (int i = 2; i <= N; i++) {
int total = 0;
for (int j = 9; j >= 0; j--) {
total += (dp[i - 1][j]% 10007);
dp[i][j] = total;
}
}
int sum = 0;
for (int i = 9; i >= 0; i--) {
sum += dp[N][i];
}
cout << sum%10007;
return 0;
}
반응형