문제 설명
0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ a의 길이 ≤ 100,000 1 ≤ b의 길이 ≤ 100,000 a와 b는 숫자로만 이루어져 있습니다. a와 b는 정수 0이 아니라면 0으로 시작하지 않습니다.
나의 코드
class Solution {
public String solution(String a, String b) {
int x = Integer.parseInt(a);
int y = Integer.parseInt(b);
int sum = x+y;
String answer = sum + "";
return answer;
}
}
NumberFormatException
이 발생
import java.math.BigInteger;
class Solution {
public String solution(String a, String b) {
BigInteger x = new BigInteger(a);
BigInteger y = new BigInteger(b);
BigInteger sum = x.add(y);
return sum.toString();
}
}
BigInteger
클래스를 사용하여 문제 해결
느낀 점
첫 번째 코드에서, int
자료형의 한계로 인해 입력된 문자열을 정수로 변환하는 과정에서 정수 범위를 초과하게 되면 발생하는 NumberFormatException
이 발생했다. 잠깐 NumberFormatException
에러에 대해 알아보자면, int
자료형이 약 -2,147,483,648부터 2,147,483,647까지의 값을 표현할 수 있는데, 주어진 입력값이 해당 범위를 초과하면 발생하게 된다.
이러한 문제를 해결하기 위해 long
자료형을 사용하거나, BigInteger
클래스를 사용하면 되겠다.
❗️ BigInteger
클래스
BigInteger bigInt = new BigInteger("12345678901234567890");
임의의 정밀도
: 임의의 크기의 정수 표현 가능. 따라서, int나 long과 같은 기본 자료형의 한계를 초과하는 매우 큰 정수값도 다룰 수 있음.불변(Immutable)성
: BigInteger 객체는 한 번 생성되면 변경할 수 없음. 따라서, 한 번 생성된 BigInteger 객체의 값은 변경되지 않으며, 변경하기 위해서는 새로운 BigInteger 객체를 생성해야 함.산술 연산 지원
: 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산을 수행 가능비트 연산 지원
: AND, OR, XOR, 시프트 등의 비트 연산을 수행 가능