[백준 2407번] 조합
[백준 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 인 것만 계산이 가능하다. 그렇기 때문에 반복문에서 돌려가면서 bigNumN
과 bigNumM
에 곱해나갈 때, 문자열로 바꾼 값을 bigInteger로 바꾸고 곱한 것이다.
댓글남기기