알고리즘

자바 큰정수 BigInteger클래스 (1271번 엄청난 부자2)

땅콩콩 2022. 2. 22. 14:18

정말정말 간단한 로직의 문제인데도 이유모를 런타임에러로 엄청 헤멨던 문제,,,ㅠㅠ

내가 헤멨던 과정을 적어보고자 한다.

 

1. 첫번째 시도 >> scanner만 사용

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
        int money = scanner.nextInt();
        int life = scanner.nextInt();
        System.out.println(money/life);
        System.out.println(money%life);
    }
}

너무 쉽다고 생각하고 scanner로 작성했는데 어림도없이 런타임오류가 떴다.

여기까지는 scanner의 속도문제라고 생각하고 다른시도를 해봤다.

 

2. 두번째 시도 >> BufferedReader사용

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int money = Integer.parseInt(st.nextToken());
        int life = Integer.parseInt(st.nextToken());
        
        System.out.println(money/life);
        System.out.println(money%life);
    }
}

scanner보다 속도가 훨씬 빠른 BufferedReader를 사용해서 작성해보았다.

이 문제같은 경우에 한줄에 여러개의 입력을 받아야 하는데,

scanner에서는 이 과정이 간단하지만 BufferedReader에서는 StringTokenizer 객체를 새로 생성해서 사용해주어야한다.

여기까지 하고 이제 될거라고 뿌듯해했는데 또 런타임 오류가 떴다.....

 

3. 정답 >> 자바 BigInteger클래스 사용

import java.math.BigInteger;
import java.util.*;
public class Test {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        BigInteger money = scanner.nextBigInteger();
        BigInteger life = scanner.nextBigInteger();

        System.out.println(money.divide(life));
        System.out.println(money.remainder(life));
    }
}

난 long보다 더 큰 정수의 단위..? 그런게 있는줄도 몰랐다.. 근데 BigInteger라는 자바의 클래스가 있었다..

BigInteger는 문자열형태여서 어떤수든지 담을 수 있다. (무한대의 수를 담을 수 있음)

이 클래스에서 주의해야 할 점은, 수의 연산에 있어서도 +-/%등의 기본 연산부호가 아닌

클래스내의 별도 메소드를 사용해줘야 한다는 점이다.

Number1.add(Number2) //더하기
Number1.subtract(Number2) //빼기
Number1.multiply(Number2) //곱하기
Number1.divide(Number2) //나누기
Number1.remainder(Number2) //나머지

넘 이상한거에서 헷갈리게 하는 느낌이다 ㅠ 흑

그래도 BufferedReader로 한줄에 여러개 입력받는 방법을 새로알게되어서 뿌듯하당!