๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/10844
๐ ๋ฌธ์ ์์ฝ
๊ธธ์ด๊ฐ ์ธ ๊ณ๋จ ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
-
- ๊ณ๋จ ์๋ ์ธ์ ํ ์๋ฆฌ์ ์ซ์ ์ฐจ์ด๊ฐ ํญ์ 1์ด์ด์ผ ํ๋ค.
- ์ฒซ ๋ฒ์งธ ์๋ฆฌ๋ 0์ด ๋ ์ ์๋ค.
- ์ ๋ต์ 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅ
๐ ํ์ด ๋ฐ ์๊ณ ๋ฆฌ์ฆ
- DP ๋ฐฐ์ด ์ ์
- `dp[i][j]`: ๊ธธ์ด๊ฐ ์ด๊ณ ๋ง์ง๋ง ์ซ์๊ฐ j์ผ ๋ ๊ณ๋จ ์์ ๊ฐ์
- `dp[1][0] = 0` (์ฒซ ์๋ฆฌ๊ฐ 0์ด๋ฉด ์๋จ)
- `dp[1][1] ~ dp[1][9] = 1` (ํ ์๋ฆฌ ๊ณ๋จ ์๋ ์๊ธฐ ์์ )
- ์ ํ์
- `dp[i][0] `= `dp[i+1][1]` (0์ ์ด์ ์๋ฆฌ๊ฐ 1์ธ ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅ)
- `dp[i][9]` = `dp[i-1][8]` (9๋ ์ด์ ์๋ฆฌ๊ฐ 8์ธ ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅ)
- `dp[i][j]` = `dp[i-1][j-1] + dp[i-1][j+1]` (๋๋จธ์ง ์ซ์๋ ์์์์ ์ค๋ ๊ฒฝ์ฐ)
- ๋ชจ๋ ๊ฐ์ 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ ์ฅ
- ๊ฒฐ๊ณผ ๊ณ์ฐ
- `dp[N][0] ~ dp[N][9]` ๊ฐ์ ๋ํ์ฌ ์ ๋ต ๋์ถ
๐ก ์ฝ๋
public class Baekjoon_10844 {
static final int MOD = 1_000_000_000;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n == 1) {
System.out.println(9);
return;
}
int ans = 0;
int[][] dp = new int[n + 1][10]; // ๊ธธ์ด๊ฐ n์ด๊ณ ๋ง์ง๋ง ์ซ์๊ฐ L์ผ๋ ๊ณ๋จ ์ด ์
Arrays.fill(dp[1], 1);
dp[1][0] = 0;
for (int i = 2; i <= n; i++) {
for (int j = 0; j <= 9; j++) {
switch (j) {
case 0 -> dp[i][j] = dp[i - 1][j + 1] % MOD;
case 9 -> dp[i][j] = dp[i - 1][j - 1] % MOD;
default -> dp[i][j] = (dp[i - 1][j + 1] + dp[i - 1][j - 1]) % MOD;
}
}
}
for (int i = 0; i <= 9; i++) {
ans = (ans + dp[n][i]) % 1_000_000_000;
}
System.out.println(ans);
}
}
๐ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- dp[i][j]๋ฅผ ์ฑ์ฐ๋ ๊ณผ์ ์ O(N × 10) = ์ต์ข ์๊ฐ ๋ณต์ก๋: O(N)
- N ≤ 100 ์ด๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ O(1000)
'์๊ณ ๋ฆฌ์ฆ(JAVA)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2624 "๋์ ๋ฐ๊ฟ์ฃผ๊ธฐ" (JAVA) (0) | 2025.03.02 |
---|---|
๋ฐฑ์ค 10451 "ํ ํ๋ก์ ํธ" (JAVA) (0) | 2025.02.26 |
๋ฐฑ์ค 10451 "์์ด ์ฌ์ดํด" (JAVA) (0) | 2025.02.26 |
๋ฐฑ์ค 1194 "๋ฌ์ด ์ฐจ์ค๋ฅธ๋ค, ๊ฐ์" (JAVA) (0) | 2025.02.26 |
๋ฐฑ์ค 2206 "๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ" (JAVA) (0) | 2025.02.22 |