[프로그래머스/181846] 두 수의 합

☑️ 문제

프로그래머스 181846

☑️ 풀이

첫 번째 풀이 (실패)

class Solution {
    public String solution(String a, String b) {
        return Long.toString(Long.parseLong(a) + Long.parseLong(b));
    }
}
  • 상세 에러

      Exception in thread "main" java.lang.NumberFormatException: For input string: "18446744073709551615"
      	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    
    • 주어진 숫자 18446744073709551615은 Long 타입의 범위를 벗어나서 에러가 발생했다.
    • Long 범위 : -9223372036854775808 ~ 9223372036854775807

두 번째 풀이 (성공)

//시간: 500.87ms
//메모리: 117MB

import java.math.*;

class Solution {
    public String solution(String a, String b) {
        BigInteger A = new BigInteger(a);
        BigInteger B = new BigInteger(b);
        return String.valueOf(A.add(B));
    }
}
  • BigInteger 타입을 사용해서 풀었다.

☑️ 문법 정리 - BigInteger

BigInteger란?

  • Java에서 매우 큰 정수를 다룰 수 있도록 제공하는 클래스이다.
  • intlong 타입의 범위를 넘어서는 큰 숫자를 처리할 때 사용한다.

BigInteger 선언 및 생성

BigInteger bigNum1 = new BigInteger("12345678901234567890");
BigInteger bigNum2 = new BigInteger("98765432109876543210");
  • BigInteger 객체는 new BigInteger(String value) 를 사용해 생성한다.
  • 문자열 형태로 숫자를 전달해야 한다.

BigInteger 연산

  • BigInteger 는 일반적인 산술 연산(+, -, *, /, %)를 직접 사용할 수 없고, 메서드를 이용해야 한다.

    연산메서드
    덧셈add(BigInteger val)
    뺄셈substract(BigInteger val)
    곱셈multiply(BigInteger val)
    나눗셈divide(BigInteger val)
    나머지remainder(BigInteger val)
    거듭제곱pow(int exponent)
  • 예시

      BigInteger sum = bigNum1.add(bigNum2); // 덧셈
      BigInteger diff = bigNum1.substract(bigNum2); // 뺄셈
      BigInteger product = bigNum1.multiply(bigNum2); // 곱셈
      BigInteger quotient = bigNum1.divide(new BigInteger("2)); // 나눗셈
      BigInteger remainder = bigNum1.remainder(new BigInteger("3")); // 나머지
      BigInteger power = bigNum1.pow(2); // 제곱
    

BigInteger 비교

  • == 연산자는 사용할 수 없고, compareTo() 메서드를 사용해야 한다.

    비교연산메서드반환값
    A == BcompareTo(B) == 00
    A > BcompareTo(B) > 0양수
    A < BcompareTo(B) < 0음수
  • 예시

      if (bigNum1.compareTo(bigNum2) > 0) {
      		System.out.println("bigNum1이 더 크다");
      } else if (bigNum1.compareTo(bigNum2) < 0) {
      		System.out.println("bigNum2이 더 크다");
      } else {
      		System.out.println("두 숫자는 같다");
      }
    

© 2021. All rights reserved.

yaejinkong의 블로그