[백준 11057번] 오르막 수
2017. 6. 16. 01:24ㆍ알고리즘/백준
반응형
풀이
1일 때 -> 0 1 2 3 4 5 6 7 8 9
2일 때 -> 01 02 03 04 05 06 07 08 09
12 13 14 15 16 17 18 19
23 24 25 26 27 28 29
:
78 79
89
3일 때 -> 001 002 003 004 005 006 007 008 009
012 013 014 015 016 017 018 019
:
779 789
889
규칙
1 -> 10
2 -> 10 + 9 + 8 + 7 + ...... + 3 + 2 + 1 = 55
3 -> 55 + 45 + 36 + ...... + 1 = 220
하나씩 증가할수록 이전에 계산한 총합부터 계산해야한다.
10007으로 나눈 나머지를 계산해야 하므로 숫자가 커지게되면 %10007을 해주어야 한다.
소스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <iostream> using namespace std; int main() { int n; long long dp[11],sum=0,copy[11]; cin >> n; if (n == 1) { cout << 10; return 0; } for (int i = 1; i <= 10; i++) { dp[i] = i; copy[i] = dp[i]; sum += dp[i]; } for (int a = 2; a < n; a++) { copy[10] = sum; for (int b = 9; b >= 1; b--) { copy[b] = (copy[b + 1] - dp[b + 1]); } for (int b = 1; b <= 10; b++) { dp[b] = copy[b] % 10007; } sum = 0; for (int b = 1; b <= 10; b++) { sum = (sum+dp[b]); } } cout << sum % 10007; return 0; } | cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2644번] 촌수계산 (0) | 2017.06.23 |
---|---|
[백준 9461번] 파도반 수열 (0) | 2017.06.20 |
[백준 1212번] 8진수 2진수 (0) | 2017.06.15 |
[백준 11048번] 이동하기 (0) | 2017.06.15 |
[백준 11052번] 붕어빵 판매하기 (0) | 2017.06.14 |