์‹ค๋ฒ„1: ๋™์  ๊ณ„ํš ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๋™์ ๊ณ„ํš๋ฒ• ๋ฌธ์ œ์ด๋‹ค. ๊ธฐ์ดˆ์ ์ธ ๋™์  ๊ณ„ํš๋ฒ• ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ์—๋Š” ํŽœ์„ ๊ฐ–๊ณ  ์“ฐ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด๋ณด์ธ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ํ™”์‹์„ ๊ฐ–๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ˆ˜์—ด ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ์‚ฌ๊ณ ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด ๋ฌธ์ œ๊ฐ€ ๋ˆˆ์— ๋“ค์–ด์˜ค์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ฉด์„œ ๊ทœ์น™์„ ์ฐพ์•„๋‚ด๋“ฏ, ์ด๊ฒƒ๋„ ์†์•„ํ”„๋‹ค๊ณ  ์ง•์ง•๋Œ€์ง€๋ง๊ณ  ์“ฐ๋ฉด์„œ ์ฐฌ์ฐฌํžˆ ํ‘ธ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

N : 1, N : 2

|์ˆซ์ž|์˜ค๋ฅด๋ง‰ ์ˆ˜ ๊ฐœ์ˆ˜|์ˆซ์ž|์˜ค๋ฅด๋ง‰ ์ˆ˜ ๊ฐœ์ˆ˜| |::----|:------:------------|::----|:------:------------| |0|1|๊ณต๋ž€|๊ณต๋ž€| |1|1|1019|19 : 9| |2|1|2029|29 : 8| |3|1|3039|39 : 7| |4|1|4049|49 : 6| |5|1|5059|59 : 5| |6|1|6069|69 : 4| |7|1|7079|79 : 3| |8|1|8089|89 : 2| |9|1|9099|99 : 1|

๊ทœ์น™์„ ๋ณด๊ฒŒ ๋˜๋ฉด, ์ตœ๊ณ  ์ž๋ฆฌ ์ˆ˜๊ฐ€ ์–ด๋–ค ์ˆ˜์ด๋ƒ์— ๋”ฐ๋ผ ๊ทธ ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜๋Š” ๊ฒฐ์ •์ด ๋˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ž˜ ๋ณด๋ฉด, N : 2์ผ ๋•Œ, ์ตœ๊ณ ์ž๋ฆฌ์ˆ˜๊ฐ€ 1์ธ ๊ฒฝ์šฐ, ์˜ค๋ฅด๋ง‰ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” 1์˜ ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 1~9๊นŒ์ง€ ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ชจ๋‘ ์˜ค๋ฅด๋ง‰ ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ์ตœ๊ณ ์ž๋ฆฌ์ˆ˜๊ฐ€ 2์ธ ๊ฒฝ์šฐ๋Š”, ์ผ์˜ ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 2์ธ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ค๋ฅด๋ง‰ ์ˆ˜๋ฅผ ๋”ํ•จ์œผ๋กœ์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.

์ด ๊ทœ์น™์„ ์ž์„ธํžˆ ๋ณด๋ฉด, ๋ณ€ํ™”ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด ๋‘๊ฐœ์ด๋‹ค.

  1. ์ตœ๊ณ ์ž๋ฆฌ์˜ ์ˆ˜
  2. ์ตœ๊ณ ์ž๋ฆฌ์— ์œ„์น˜ํ•˜๋Š” ์ˆซ์ž

์ด ๋‘๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  dp๋ฅผ ์ •์˜ํ•˜๊ณ , ์ ํ™”์‹์„ ์„ธ์›Œ๋ณด์ž.

dp[N][m] = N ์ž๋ฆฌ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ์ˆ˜๊ฐ€ M์˜ ์ˆซ์ž๋ฅผ ๊ฐ€์งˆ ๋•Œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅด๋ง‰ ์ˆ˜์˜ ๊ฐœ์ˆ˜

dpdp[N] = N ์ž๋ฆฌ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ์ˆ˜๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅด๋ง‰ ์ˆ˜์˜ ๊ฐœ์ˆ˜

์ด๋ ‡๊ฒŒ ์ •์˜ํ–ˆ์„ ๋•Œ, dp ์ ํ™”์‹์˜ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

dp\[N\]\[M\] = \sum\_{i=M}^{9}dp\[N-1\]\[i\]

์ด๊ฑธ ๊ฐ€์ง€๊ณ  dpdp ์ ํ™”์‹์„ ์„ธ์šฐ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

dpdp\[N\] = \sum\_{i=0}^{9}dp\[N\]\[i\] + dpdp\[N-1\]

์ˆ˜์‹๋„ ์„ธ์› ์œผ๋‹ˆ ์ด์ œ ๊ตฌํ˜„๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ, dp๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด ์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์—๋Š” N : 1 ์ธ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ์ˆซ์ž์— 1์˜ ๊ฐ’์„ ์ค€ ๋’ค์— ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

Code

// ๋ฐฑ์ค€ 11057๋ฒˆ ์˜ค๋ฅด๋ง‰ ์ˆ˜
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N = 0;
int dp[1001][10] = {0};
int dpdp[1001] = {0};
int mod = 10007;
 
int main(){
    cin >> N;
    // ์ดˆ๊ธฐ๊ฐ’ ์„ธํŒ…
    for (int i = 0; i < 10; i++) {
        dp[1][i] = 1;
    }
    dpdp[1] = 10;
 
    for (int i = 2; i <= N ; i++) {
        // dp[N][M]์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ
        for (int j = 1; j < 10; j++) {
            for (int k = j; k < 10; k++) {
                dp[i][j] += dp[i-1][k];
                dp[i][j] %= mod;
            }
        }
        // dpdp[N]์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ
        for (int j = 0; j < 10; j++) {
            dpdp[i] += dp[i][j];
        }
        dpdp[i] += dpdp[i-1];
        dpdp[i] %= mod;
    }
    // ์ •๋‹ต
    cout << dpdp[N] << '\n';
}
 

Reference