๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2225
๐ ๋ฌธ์ ์์ฝ
- 0๋ถํฐ N๊น์ง์ ์ ์ K๊ฐ๋ฅผ ๋ํด์ ๊ทธ ํฉ์ด N์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
- ์์๊ฐ ๋ฌ๋ผ๋ ๊ฐ์ ๊ฒฝ์ฐ๋ก ์ธ์ (1+2์ 2+1์ ๊ฐ์ ๊ฒฝ์ฐ).
- ํ ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์ธ ์ ์์( 1+1 )
- ๊ฒฐ๊ณผ๋ฅผ 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅ,
๐ ํ์ด ๋ฐ ์๊ณ ๋ฆฌ์ฆ
- dp[k][n] ์ ์
- `dp[k][n]`: n์ k๊ฐ์ ์ ์๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์.
- ์ด๊ธฐ๊ฐ ์ค์
- `dp[1][n] = 1` → ํ๋์ ์ซ์๋ก n๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ 1๊ฐ (n ์์ฒด).
- `dp[k][0] = 1` → 0์ k๊ฐ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ 0 + 0 + ... + 0 ํ๋๋ฟ.
- ์ ํ์ (DP)
- `dp[k][n] = dp[k-1][n] + dp[k][n-1]`
- `dp[k-1][n]` : k-1๊ฐ์ ์ซ์๋ก n๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ ( `dp[k-1][n]` ์ 0์ ์ฆ๊ฐํด์ฃผ๋ฉด `dp[k][n]` ).
- `dp[k][n-1]` : k๊ฐ์ ์ซ์๋ก n-1์ ๋ง๋๋ ๋ฐฉ๋ฒ ( `dp[k][n-1]`์ 1์ ์ฆ๊ฐํด์ฃผ๋ฉด ` dp[k][n]` )
- `dp[k][n] = dp[k-1][n] + dp[k][n-1]`
โ dp[1][3] (1๊ฐ์ ์ซ์๋ก 3์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)
- (3) โก dp[1][3] = 1
โก dp[2][2] (2๊ฐ์ ์ซ์๋ก 2๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)โข ์ ํ์ ์ ์ฉ
- (0,2), (1,1),(2,0) โก dp[2][2] = 3
โข ์ ํ์ ์ ์ฉ
- dp[2][3] = dp[1][3] + dp[2][2] = 1 + 3 = 4
- โก (0,3), (1,2), (2,1), (3,0)
๐ก ์ฝ๋
public class Baekjoon_2225 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[][] dp = new int[k + 1][n + 1];
// ์ด๊ธฐ๊ฐ ์ค์
Arrays.fill(dp[1], 1); // 1๊ฐ์ ์ซ์๋ก n์ ๋ง๋๋ ๋ฐฉ๋ฒ์ 1๊ฐ
for (int i = 1; i <= k; i++) {
dp[i][0] = 1; // 0์ i๊ฐ์ ์ซ์๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ 1๊ฐ
}
// dp ์ ํ์
for (int i = 2; i <= k; i++) {
for (int j = 1; j <= n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
dp[i][j] %= 1000000000; // ๊ตํ๋ฒ์น ์ฑ๋ฆฝ
}
}
System.out.println(dp[k][n] );
}
}
๐ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- O(KN)
- N ≤ 200, M ≤ 200→ ์ต์ ์ ๊ฒฝ์ฐ 40,000
'์๊ณ ๋ฆฌ์ฆ(JAVA)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2206 "๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ" (JAVA) (0) | 2025.02.22 |
---|---|
๋ฐฑ์ค 5427 "๋ถ" (JAVA) (0) | 2025.02.22 |
๋ฐฑ์ค 9251 "LCS (์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด)" (JAVA) (0) | 2025.02.19 |
๋ฐฑ์ค 11054 "๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด" (JAVA) (0) | 2025.02.18 |
๋ฐฑ์ค 11053 & 11722 "๊ฐ์ฅ ๊ธด ์ฆ๊ฐ/๊ฐ์ ๋ถ๋ถ ์์ด" (JAVA) (0) | 2025.02.18 |