🛫 Programmers School 구슬을 나누는 경우의 수 문제 풀이 과정에서 알게 된 개념 정리
(여기에는 내가 사용했던 부분만 정리하였다. 자세한 부분은 Reference에 작성한 사이트 확인)
Int, Long의 범위를 벗어나는 경우 0으로 표현되고 있기에 더 큰 수를 계산하게 될때는 BigInteger을 사용해야한다.
BigInteger는 무한대라고 생각하면 된다.
BigInteger클래스는 문자열로 되어있어서 초기화시에 문자열로 초기화 해야한다.
정수로 초기화 하고 싶다면 valueOf를 사용한다.
import java.math.*;
BigInteger temp = new BigInteger("1000");
BigInteger temp2 = BigInteger.valueOf("100);
BigInteger는 문자열로 되어있어서 BigInteger의 내부 메서드로만 연산이 가능하다. (BigInteger 끼리 계산 가능)
temp.add(temp2);
temp.subtract(temp2);
temp.multiply(temp2);
temp.divide(temp2);
int int_bigNum = bigNumber.intValue();
코드의 결과는 맘에 들지 않지만 BigInteger를 사용해볼 수 있는 기회여서 좋았다.
더 간단한 방법이 있는지 계속 생각해봐야할 것 같다. (분모들의 최소값을 구해서 하는 방법 등)
import java.math.*;
class Solution {
public int solution(int balls, int share) {
int answer = 0;
BigInteger denominator = new BigInteger("1");
BigInteger numerator = new BigInteger("1");
denominator = cal(balls, denominator);
numerator = cal(balls-share, numerator);
numerator = cal(share, numerator);
denominator = denominator.divide(numerator);
answer = denominator.intValue();
return answer;
}
private BigInteger cal(int range, BigInteger num){
BigInteger temp = new BigInteger("1");
for (int i=range; i>0; i--){
temp = BigInteger.valueOf(i);
num = num.multiply(temp);
}
return num;
}
}