자바 코딩테스트 오류를 기억하자.
1.
INDEX의 배열을 넘어갔다는 뜻. (idnex -1 혹은 오타를 주의하자)
2.
0으로 나눈것. 주의하자.
3. 팩토리얼 실패 <백준, 구술을 나누는 경우의 수>
30! 을 계산하다보니, INT의 범위를 넘게 되었다. 이를 어떻게 해결할까?
1. LONG으로 변경한다.
그러나 30!은, LONG만으론 택도 없이 부족했다.
2. BIGINTEGER로 변경하자.
public int solution(int balls, int share) {
int answer = 0;
BigInteger bunza = new BigInteger("1");
BigInteger bigbunmo = new BigInteger("1");
BigInteger smallbunmo = new BigInteger("1");
for(int i = 1; i <= balls; i++) {
bunza = bunza.multiply(BigInteger.valueOf(i));
}
for(int i = 1; i <= share; i++) {
bigbunmo = bigbunmo.multiply(BigInteger.valueOf(i));
}
for(int i = 1; i <= balls - share; i++) {
smallbunmo = smallbunmo.multiply(BigInteger.valueOf(i));
}
BigInteger result = (bunza.divide(bigbunmo.multiply(smallbunmo))) ;
answer = result.intValue();
return answer;
}
BigInteger는, string의 값으로 받는다.
넣을때도 BigInteger.toString, 곱할때도 ~.multiply(), 나눌떄도 ~.divide()
int로 바꿀때도 ~.intValue().
String으로 받음을 기억하고, 매우매우 클때만 사용하자.