[java] 백준 1252번 이진수 덧셈알고리즘/백준2021. 8. 8. 20:03
Table of Contents
문제는 쉬워 보일 수 있다.
하지만 입력에서 각 이진수의 길이는 80을 넘지 않는다.
즉, 79자리인 입력이 들어올 경우 웬만한 자료형들은 범위를 벗어나 NumberFormat과 같은 런타임 에러가 발생할 수 있다.
여기서 써야할 클래스는 BigInteger 클래스, int, long, String으로 해보았지만 되는 것은 없었고 결론은 BigInteger 클래스였다.
나의 풀이 방법은 이렇다.
무한한 수를 담을 수 있는 BigInteger 클래스로 값을 담아서 문자열로 바꿔 준 후
문자열(2진수)을 다시 10진수로 변환시키기 위해서 BigInteger 클래스에 담아준다.
그리고 BigInteger의 add 메소드를 통해 10진수로 변환한 a와 b의 가산을 해주고
toString() 메소드로 다시 2진수를 만들어서 문자열로 출력하도록 했다.
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger b1 = sc.nextBigInteger();
BigInteger b2 = sc.nextBigInteger();
String s1 = b1.toString();
String s2 = b2.toString();
// 2진수를 10진수로 변환
BigInteger a = new BigInteger(s1, 2);
BigInteger b = new BigInteger(s2, 2);
// 10진수로 변환한 두 수를 더하고
BigInteger sum = a.add(b);
// 두 수를 더한 sum의 값을 2진수로 다시 변환
String result = sum.toString(2);
System.out.println(result);
}
}
String으로 입력받을 때는 범위가 벗어나서 numberformat 오류가 발생하는데 BigInteger 클래스로 입력을 받고 그것을 toString() 문자열로 바꿔주니 에러가 나지 않았다. String과 toString()의 차이가 있는 듯하다.
내가 생각했을 때 toString() 도 어찌 됐건 String에서 나온 것이라 범위가 같아서 에러 나지 않을까 했는데 정상 작동하는 거보고... 놀랐다.
혹시 아시는 분 있으시면 좀 알려주세요. ㅎㅎ
'알고리즘 > 백준' 카테고리의 다른 글
[java] 백준 2523번 별 찍기 - 13 (6) | 2021.08.09 |
---|---|
[java] 백준 5073번 삼각형과 세 변 (2) | 2021.08.09 |
[java] 백준 10826번 피보나치 수 4 (12) | 2021.08.08 |
[java] 백준 2748번 피보나치 수 2 (0) | 2021.08.08 |
[java] 백준 2747번 피보나치 수 (4) | 2021.08.07 |
@펄찌 :: Pearl's Story
펄의 일상이 궁금한 사람 요기~
즐거운 하루 되셨으면 좋겠습니다😊