이번 문제는 long 범위 밖의 계산 문제였습니다. 예제의 왼쪽 숫자가 딱 long의 마지막 범위고 오른족은 1 차이로 long범위를 벗어났습니다. 그렇기에 무한대 계산이 가능한 BigInteger클래스를 사용하였습니다.
Step 0-1. 해답 코드(BufferedReader)
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.math.BigInteger;
public class Big_APlusB {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
BigInteger big = new BigInteger(st.nextToken());
BigInteger big2 = new BigInteger(st.nextToken());
System.out.println(big.add(big2));
}
}
BufferedReader를 사용한 방법입니다.
Step 0-2.해답 코드(Scanner)
import java.util.Scanner;
import java.math.BigInteger;
public class Big_APlusB {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
BigInteger big = new BigInteger(sc.next());
BigInteger big2 = new BigInteger(sc.next());
System.out.println(big.add(big2));
}
}
Scanner를 사용한 방법입니다.
Step 1. 문제 접근
long범위를 벗어나기에 무한대 계산이 가능한 클래스를 찾아야 했고, 찾은 클래스가 BigInteger 클래스였습니다.
Step 2. 문제 해결
이번 문제는 따로 문제 해결은 따로 쓰지 않겠습니다.
한 가지 생각할 점은 Scanner에서 sc.next()로 입력을 받았는데 이는 문자열로 내용을 받아도 BigInter 클래스가 알아서 잘 처리를 해주기 때문이었습니다. 혹은 Scanner에 존재하는 nextBigInteger();메서드를 사용하면 굳이 math 클래스를 import 해주지 않고도 Scanner 클래스만을 갖고 문제를 풀 수 있습니다. 해당 방법은 아래와 같습니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println(sc.nextBigInteger().add(sc.nextBigInteger()));
}
}
Step 3. 느낀 점
BigInter 클래서를 처음 알았는데 큰 범위의 숫자를 구할 때 대처 방법을 배울 수 있었습니다. 또 개인적으로 숏코딩을 한 번 해봤는데 참 재밌었던거 같습니다.
출처 : 백준 10757번 https://www.acmicpc.net/problem/10757