[Java] BigInteger (선언, 사칙연산, 형변환)

epiphany·2022년 12월 16일
0

Programmers School

목록 보기
21/22
post-thumbnail

🛫 Programmers School 구슬을 나누는 경우의 수 문제 풀이 과정에서 알게 된 개념 정리
(여기에는 내가 사용했던 부분만 정리하였다. 자세한 부분은 Reference에 작성한 사이트 확인)

🧩 BigInteger

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 int_bigNum = bigNumber.intValue();

📑 Code

코드의 결과는 맘에 들지 않지만 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;
    }
}

📚 Reference

0개의 댓글