최대 1 분 소요

[백준 2407번] 조합

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package _2월_1주차;
 
import java.util.Scanner;
import java.math.BigInteger;
public class 백준_손수경_정답_2407 {
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        BigInteger bigNumN = BigInteger.ONE;
        BigInteger bigNumM = BigInteger.ONE;
        
        for (int i = 0; i < m; i++) {
            bigNumN = bigNumN.multiply(new BigInteger(String.valueOf(n - i)));
            bigNumM = bigNumM.multiply(new BigInteger(String.valueOf(m - i)));
        }
        System.out.println(bigNumN.divide(bigNumM));
    }
}
 
cs

처음에는 곱해지는 수가 많기 때문에 데이터형을 long을 사용하였다. 하지만 long이 가능한 범위보다도 커지는 경우가 있어서 원하는데로 값이 나오지 않았다.

import java.math.BigInteger

BigInteger 은 long보다도 올 수 있는 범위가 크다. 여기서 초기화 할 때, BigInteger.ONE을 사용했는데 ONE은 객체가 미리 정의된 상수 중 하나로 정수 1을 의미한다. ONE이외에 ZERO, TEN 이 있다. BigInteger 은 객체 이름이 integer이긴 하지만 매개변수로는 문자열만 들어올 수 있다. 또 객체에서 제공하는 매서드들은 데이터형(?)이 bigInteger 인 것만 계산이 가능하다. 그렇기 때문에 반복문에서 돌려가면서 bigNumNbigNumM 에 곱해나갈 때, 문자열로 바꾼 값을 bigInteger로 바꾸고 곱한 것이다.

댓글남기기