코딩테스트

자바 코딩테스트 오류를 기억하자.

임지혁코딩 2024. 4. 28. 13:18

 

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으로 받음을 기억하고, 매우매우 클때만 사용하자.