1 minute read

이항 계수 2

시간 제한 메모리 제한
1 초 256 MB

문제

자연수 N과 정수 K가 주어졌을 때 이항 계수 (NK)를 10,007로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ K ≤ N))

출력

(NK)를 10,007로 나눈 나머지를 출력한다.

예제 입력 1

5 2

예제 출력 1

10

출처

알고리즘 분류

Idea.

  • https://soonhankwon.github.io/til/algorithm11050/
  • 푸는 방법은 똑같지만, 10007로 나눈 나머지를 출력하라는 문제이다.
  • 모듈러 연산의 특성
    • ( A mod N + B mod N) mod N = ( A + B ) mod N
  • 점화식의 결괏값이 나올 때 마다 모듈러 연산을 해준다.

Code.

package combination;

import java.util.Scanner;

public class P11051_binomialCoefficient {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // 총 개수
		int K = sc.nextInt(); // 선택 수

		int[][] DP = new int[N + 1][N + 1];

		for (int i = 0; i <= N; i++) {
			DP[i][i] = 1;
			DP[i][0] = 1;
			DP[i][1] = i;
		}

		for (int i = 2; i <= N; i++) { //  i가 1인경우 선택 수는 모두1 위에서 모두 채워줌 
			for (int j = 1; j < i; j++) {
				DP[i][j] = DP[i - 1][j] + DP[i - 1][j - 1]; 
				DP[i][j] = DP[i][j] % 10007; // MOD
			}
		}
		System.out.println(DP[N][K]);
	}

}

Leave a comment