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으로 받음을 기억하고, 매우매우 클때만 사용하자.
'코딩테스트' 카테고리의 다른 글
백트래킹 (1) | 2024.05.17 |
---|---|
조합. 문제 풀이 팁 (0) | 2024.05.10 |
SQL 3 (0) | 2024.04.16 |
고난이도 구현 문제 (0) | 2024.04.14 |
SQL 2 (0) | 2024.03.30 |