반응형
import java.util.Scanner;
// 이항계수2
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int[][] arr = new int[1001][1001];
for(int i=1; i<=1000; i++) {
for(int j=1; j<=i; j++) {
if(j==1 || j==i) arr[i][j] = 1;
else {
arr[i][j] = (arr[i-1][j]+arr[i-1][j-1])%10007;
}
}
}
// for(int i=1; i<=10; i++) {
// for(int j=1; j<=i; j++) {
// System.out.print(arr[i][j] + " ");
// }
// System.out.println();
// }
System.out.println(arr[N+1][K+1]);
}
}
이항계수를 구해서 10007로 나눈 나머지를 구하는 문제입니다. 이항계수를 계산하는 정의대로 하면 분자를 계산하고 분모를 계산해서 분자 / 분모 / 10007 을 하면 되지만, 그렇게 하게 되면 주어진 N의 범위 때문에 계산하는 도중에 integer 로 변수를 선언하면 범위를 넘어갑니다. 그래서 저는 파스칼 삼각형을 2차원 배열로 만들어 값을 처음부터 1000까지 구해서 주어진 값을 출력하는 방법으로 문제를 해결했습니다.
[ 문제 풀이 ]
처음 값과 마지막 값은 1로 하고, 나머지 값은 위와 위의 왼쪽값을 더하는 값을 구해서 파스칼 삼각형을 1000 번째 행까지 만들었습니다.
1
1 1
1 2 1
1 3 3 1
1 3 6 3 1
1 4 9 9 4 1
...
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[5502] 팰린드롬 (0) | 2019.09.25 |
---|---|
[2606] 바이러스 (0) | 2019.09.24 |
[1389] 케빈 베이컨의 6단계 법칙 (0) | 2019.09.21 |
[9251] LCS (0) | 2019.09.21 |
[1157] 단어 공부 (0) | 2019.09.18 |