알고리즘/백준

공부 132일차: 백준 2225번 합분해 자바 java

김발자~ 2022. 12. 9. 22:31
반응형

2225 합분해

https://www.acmicpc.net/problem/2225

 

2225번: 합분해

첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

 

 

 


백준 2225번 문제 합분해


문제


 

 

 

 


과정 생각해보기


 

https://yeoeun-ji.tistory.com/49

참고 블로그

https://hu-coding.tistory.com/28

n, k의 순서가 반대긴 하지만 계산 접근에 유용했던 블로그

 

점화식: dp[n][k] = dp[n-1][k] + dp[n][k-1]

 

 

 


정답 인정 코드


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.io.*;
import java.util.*;
 
public class Main {
 
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        int[][] dp = new int[n+1][k+1];
        final int MOD = 1_000_000_000;
        
        // k=1 -> [1][1] = 1, [2][1] = 2, ... 무조건 1개씩
        for(int i = 1; i < n+1; i++) {
            dp[i][1= 1;
        }
        
        // n=1 -> [1][1] = 1, [1][2] = 0+1,1+0, [1][3] = 1+0+0, 0+1+0, 0+0+1, ... k개씩
        for(int i = 1; i < k+1; i++) {
            dp[1][i] = i;
        }
        
        for(int i = 2; i < n+1; i++) {
            for(int j = 2; j < k+1; j++) {
                // 오버 플로우 방지를 위해 MOD의 나머지로 구한다
                dp[i][j] = (dp[i-1][j] + dp[i][j-1])%MOD;
            }
        }
        System.out.println(dp[n][k]);
    }
 
}
 
cs

 

모든 dp 문제가 그렇듯 점화식을 찾는 게 가장 중요하다

 

 


 

반응형