๋ฌธ์ |
๋ฌธ์
์ค๋ฅด๋ง ์๋ ์์ ์๋ฆฌ๊ฐ ์ค๋ฆ์ฐจ์์ ์ด๋ฃจ๋ ์๋ฅผ ๋งํ๋ค. ์ด๋, ์ธ์ ํ ์๊ฐ ๊ฐ์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์น๋ค.
์๋ฅผ ๋ค์ด, 2234์ 3678, 11119๋ ์ค๋ฅด๋ง ์์ด์ง๋ง, 2232, 3676, 91111์ ์ค๋ฅด๋ง ์๊ฐ ์๋๋ค.
์์ ๊ธธ์ด N์ด ์ฃผ์ด์ก์ ๋, ์ค๋ฅด๋ง ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์๋ 0์ผ๋ก ์์ํ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (1 โค N โค 1,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ธธ์ด๊ฐ N์ธ ์ค๋ฅด๋ง ์์ ๊ฐ์๋ฅผ 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด๊ณผ์ |
(1)๊ท์น
- DP์ด๋ฏ๋ก ์ ํ์๊ณผ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํฉ๋๋ค.
- ์ฒซ์งธ ์๋ฆฌ์๋ 0~9
- ๋งจ ๋ง์ง๋ง ๊ฐ์ 1๋ฐ์ ์ฌ ์ ์์ต๋๋ค.
- ์ค๋ฅด๋ง์ ๊ฐฏ์๋ 10007๋ก ๋๋ ๋๋จธ์ง ์ ๋๋ค.
(2)์์
n=3๊น์ง์ ์๋ฅผ ๋ง๋ค์ด ๋ด ๋๋ค.
n=1 |
0,1,2,3,4,5,6,7,8,9 (10๊ฐ) |
n=2 |
00,01,02,03........89,99 (55๊ฐ) |
n=3 |
000,001,002......899,999 (220๊ฐ) |
๋ฐฐ์ด์ ๋ฃ์ด์ ํํํด ๋ณด๋ฉด, i๋ฒ์งธ ์์ผ๋ก ๋ง๋ค์ ์๋ ์ซ์์ ๊ฐฏ์๋
0 1 2 3 4 5 6 7 8 9
n=1 1 1 1 1 1 1 1 1 1 1 (9๊ฐ)
n=2 10 9 8 7 6 5 4 3 2 1 (55๊ฐ)
n=3 55 45 36 28 21 15 10 6 3 1 (220๊ฐ)
์ด๋ฏ๋ก,
n=m์ผ ๊ฒฝ์ฐ
9๋ฒ์งธ ์ธ๋ฑ์ค๋ 1์ด๊ณ
๋๋จธ์ง ์ธ๋ฑ์ค๋ d[m-1][ํ์ฌ์ธ๋ฑ์ค] ~ d[m-1][9]๊น์ง์ ํฉ์ ๋๋ค.
๊ฐ d[n-1][0]~d[n-1][9]๊น์ง์ ํฉ์ %10007ํด์ ๋ํด์ค ๋ค, ๋ง์ง๋ง ์ถ๋ ฅ์๋ %10007์ ํด์ ๋ต์ ๊ตฌํฉ๋๋ค.
(3)์ฝ๋
#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<vector<long long>> memo(N, vector<long long>(10, 0)); memo[0] = {1,1,1,1,1,1,1,1,1,1}; for (int n = 1; n < N; n++){ for (int i = 0; i < 10; i++){ if (i == 9){ memo[n][9] = 1; } else{ long long temp = 0; for (int k = i; k < 10; k++) temp += memo[n - 1][k]; memo[n][i] = temp%10007; } } } int sum = 0; for (int i = 0; i < 10; i++) sum += memo[N - 1][i]; cout << sum%10007 << endl; return 0; } | cs |
'๐ค PS(Problem Solving) > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9456๋ฒ - ์คํฐ์ปค (0) | 2019.07.08 |
---|---|
[๋ฐฑ์ค] 2193๋ฒ - ์ด์น์ (0) | 2019.07.07 |
[๋ฐฑ์ค] 10844๋ฒ - ์ฌ์ด ๊ณ๋จ ์ (0) | 2019.07.05 |
[๋ฐฑ์ค] 9095๋ฒ - 1, 2, 3 ๋ํ๊ธฐ (0) | 2019.07.03 |
[๋ฐฑ์ค] 11727๋ฒ - 2รn ํ์ผ๋ง2 (0) | 2019.07.01 |