두 수의 합

nacSeo (낙서)·2024년 3월 18일
0

프로그래머스

목록 보기
123/169

문제 설명

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 클래스

  • Java에서 정수를 임의의 정밀도로 다룰 수 있는 클래스
  • java.math 패키지에 포함되어 있으며, 다음과 같이 생성 가능
BigInteger bigInt = new BigInteger("12345678901234567890");
  • 주요 특징
    - 임의의 정밀도: 임의의 크기의 정수 표현 가능. 따라서, int나 long과 같은 기본 자료형의 한계를 초과하는 매우 큰 정수값도 다룰 수 있음.
    - 불변(Immutable)성: BigInteger 객체는 한 번 생성되면 변경할 수 없음. 따라서, 한 번 생성된 BigInteger 객체의 값은 변경되지 않으며, 변경하기 위해서는 새로운 BigInteger 객체를 생성해야 함.
    - 산술 연산 지원: 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산을 수행 가능
    - 비트 연산 지원: AND, OR, XOR, 시프트 등의 비트 연산을 수행 가능
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글