알고리즘 공부
[백준 2225번] 합분해 - java
철매존
2024. 11. 4. 23:00
728x90
문제 설명
1. 0부터 N까지의 정수 K 개를 더해서 합이 N이 되어야 한다.
2. 즉 N번 계산해서 K가 나오도록
풀이 과정
1. 이거 DP이다.
2. DP는 일단 무식하게 풀면서 점화식을 찾아보는 것이 중요하다.
3. 그래서 풀어보면
요런 식으로 나온다.
한번 계산할 때에는 (0) | (1) | (2) | (3) | (4)
두번 계산할 때에는 (00) | (10) (01) | (03) (12) (21) (30) | (04)(13)(22)(31)(40)
이런 식으로 간다.
그래서 저거 잘 들여다 보면 점화식이 대충 보인다.
val[i][j] = val[i-1][[j] + val[i][j-1]
이런 식으로
그래서 일단 전체를 1로 초기화하고 더해가면 된다.
코드
import java.util.*;
public class Main
{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long MODULAR = 1000000000;
int N = sc.nextInt();
int K = sc.nextInt();
long val[][] = new long[K+1][N+1];
for (int i=0; i<K+1; i++) {
for (int j=0; j<N+1; j++) {
val[i][j] = 1;
}
}
for (int i=2; i<K+1; i++) {
for(int j=1; j<N+1; j++) {
val[i][j] = (val[i-1][j] + val[i][j-1]) % MODULAR;
}
}
System.out.println(val[K][N]);
}
}