๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 10844๋ฒ ์ค๋ฅด๋ง ์์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
ํด๊ฒฐ๋ฒ
์ด๋ฒ ๋ฌธ์ ๋ ์ง๋ ์๊ฐ์ ๋ฐฐ์ ๋ ๋ฐฑ์ค ์ฌ์ด ๊ณ๋จ ์์ ๋ฌธ์ ์ ๋น์ทํ ๋ฌธ์ ์ด๋ค.
์ง๋ ์๊ฐ์ ๋ฐฐ์ ๋ ์ฌ์ด ๊ณ๋จ ์์ ๋ฌธ์ ์์๋ n์๋ฆฌ์ m ๋ค์ ์ฌ ์ ์๋ ์๊ฐ n-1๋ฒ์งธ์ m + 1๋ฒ๊ณผ m - 1๋ฒ์ด์๋ค.
ํ์ง๋ง ์ด๋ฒ์ ์กฐ๊ธ ๋ค๋ฅด๋ค.
์ ๊ทผ๋ฒ
DP ํ ์ด๋ธ์ ๊ธธ์ด๊ฐ n์๋ฆฌ์ธ ์ค๋ฅด๋ง ์์ 0 ~ 9๊ฐ ๊ฐ๊ฐ ๋ช๋ฒ์ด ๋ค์ด๊ฐ๋์ง ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ํ ์ ์๋ค.
int[][] dp new int[n+1][10];
arr[n][m] = 10 ์ด๋ผ๋ DP ํ ์ด๋ธ์ด ์กด์ฌํ ๋, n์ ์๋ฆฌ์๋ฅผ ๋ปํ๋ฉฐ(์ผ์ชฝ์์๋ถํฐ n์์๋ฆฌ n-1์ ์๋ฆฌ ...) m์ n์ ์๋ฆฌ์ ์ฌ ์ ์๋ ์์ฐ์ (0~9) ๋ฅผ ์๋ฏธํ๋ค.
๊ทธ๋ผ n+1์๋ฆฌ์ m์๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํ ๊น?
์๋ฅผ ๋ค์ด 578์ด๋ผ๋ 3์๋ฆฌ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
5 7 8 ์ด๋ผ๋ ์๋
5 7 8
(n) ๋ฒ์งธ ์ (n-1) ๋ฒ์งธ ์ (n-2) ๋ฒ์งธ ์
๊ณผ ๊ฐ์ด ๋๋ค.
๊ทธ๋ผ x 5 7 8์ด๋ผ๋ 4์๋ฆฌ ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ฉด,
x 5 7 8 ์ด๋ผ๋ ์๋
x 5 7 8
(n) ๋ฒ์งธ ์ (n-1) ๋ฒ์งธ ์ (n-2) ๋ฒ์งธ ์ (n-3) ๋ฒ์งธ ์
์์ ๊ฐ์ ํํ๊ฐ ๋๋ค.
๊ทธ๋ผ ์ค๋ฅด๋ง ์์ ํน์ฑ์ ์ํด์ n ์๋ฆฌ์ ์ฌ ์ ์๋ ์๋ n-1๋ฒ์งธ์ ์๋ณด๋ค ์์ ์์ฌ์ผ ํ๋ค.
๊ทธ๋ผ ์์ ๊ฒฝ์ฐ, n๋ฒ์งธ์ ์ฌ ์ ์๋ ์๋
5 - 0
= 5;5 - 1
= 4;5 - 2
= 3;5 - 3
= 2;5 - 4
= 1;5 - 5
= 0;
์ผ๋ก ์ด 6๊ฐ์ ์๊ฐ ์ฌ ์ ์๋ค.
๊ทธ๋ผ
- 0578 ์ด ๋ ๋์ ๊ฒฝ์ฐ์ ์ (578์ ๊ฒฝ์ฐ์ ์)
- 1578 ์ด ๋ ๋์ ๊ฒฝ์ฐ์ ์ (578์ ๊ฒฝ์ฐ์ ์)
- 2578 ์ด ๋ ๋์ ๊ฒฝ์ฐ์ ์ (578์ ๊ฒฝ์ฐ์ ์)
- ...
- 5578 ์ด ๋ ๋์ ๊ฒฝ์ฐ์ ์ (578์ ๊ฒฝ์ฐ์ ์)
์ด ๋๋ฏ๋ก 578์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ค๋ฅด๋ง์์ ํด๋นํ๋ ์๊ฐ ๋ ๋ ๊น์ง ํฉ์ฐํด์ฃผ๋ฉด ๋๋ค.
int[][] dp new int[n+1][10];
์ ๋ต ์ฝ๋
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[][] dp = new int[1001][10];
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++){
int sum = 0;
for(int k = 0; k <= j; k++) {
sum = (sum + dp[i-1][k]) % 10007;
}
dp[i][j] = sum % 10007;
}
}
int answer = 0;
for(int i = 0; i < dp[n].length; i++) {
answer = (answer + dp[n][i]) % 10007;
}
bw.write(String.valueOf(answer));
bw.flush();
bw.close();
}
}
๋ฌธ์ ํ๊ณ
์ด ๋ฌธ์ ๋ ์ฌ์ด ๊ณ๋จ ์์ ์ ์ฌํ ๋๋์ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ์ฝ๋ค๊ฐ ์๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ด ๊ณ๋จ ์๋ฅผ ํ๊ณ ๋ฐ๋ก ํ์๋ ๋ฌธ์ ์ด๋ค. ์ฌ์ด ๊ณ๋จ ์๋ ๋๊ตฐ๊ฐ์ ๋ต์ ๋ณด๊ณ ํ์๋ ๋ฌธ์ ์์๋ค.
์ฌ์ด ๊ณ๋จ ์์์ ์ ์ฉํ๋จ ๋ฐฉ์์ด ์ด๋ฏธ ๋ด ๋จธ๋ฆฌ์์ ๊ฐ์ธ๋์ด ์์๊ธฐ ๋๋ฌธ์ ๋๋ ํด๋น ๋ฌธ์ ์์ ์๋ก์ด ์๊ฐ์ ํ ์ฌ์ ๊ฐ ์์๋ค.
์๋ง ์ฌ์ด ๊ณ๋จ ์์ ๊ท์น๋ง ๋ณด๊ณ ์ง๋ ๋ฌธ์ ๋ฅผ ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ด ์๋๊น ์ถ๋ค.
์์ง ๋ถ์กฑํ ๊ฒ์ ํ์คํ๊ฒ ์ง๋ง, ํ ๋ฌธ์ ๋ฅผ ํ๊ณ ํ๊ณ ๋ฅผ ํ๋ฉฐ ๋ค์ํ ์ ๊ทผ์ ํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๋๋ ๋ฌธ์ ์ด๋ค.
๋๊ธ