[프로그래머스/181846] 두 수의 합
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이 (실패)
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에서 매우 큰 정수를 다룰 수 있도록 제공하는 클래스이다.
int
나long
타입의 범위를 넘어서는 큰 숫자를 처리할 때 사용한다.
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 == B compareTo(B) == 0 0 A > B compareTo(B) > 0 양수 A < B compareTo(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("두 숫자는 같다"); }