본문 바로가기
코딩테스트 준비/백준

[백준] 1252번 - 이진수 덧셈 [Java]

by mwzz6 2025. 3. 14.

https://www.acmicpc.net/problem/1252

 

[백준] 1252번 - 이진수 덧셈 [Java]


1.  아이디어

 

이진수의 덧셈을 하는 문제로 이진수의 길이가 최대 80이어서 int나 long 같은 기본 타입으로는 처리하기 어렵다.

배열을 활용해 직접 이진수의 덧셈을 구하는 방법과 큰 수 연산에 활용할 수 있는 BigInteger 클래스의 메서드를 활용하는 방법 2가지로 해결했다.


2. 문제풀이

 

배열을 활용할 경우 덧셈으로 자릿수가 넘어가는 것을 고려해서 두 수 중 길이가 더 긴 수의 길이보다 1 크게 잡았다. 일단 덧셈을 수행한 후 뒤에서부터 순회하며 자릿수 이동을 구현하고 앞의 0을 제외하고 출력하도록 했고 출력 결과가 0인 경우에 대한 예외처리를 했다.


3. 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());

        char[] A = st.nextToken().toCharArray();
        char[] B = st.nextToken().toCharArray();

        int len = Math.max(A.length, B.length);
        int[] arr = new int[1 + len];

        for (int i = 0; i < A.length; i++) {
            arr[i - A.length + len + 1] += A[i] - '0';
        }
        for (int i = 0; i < B.length; i++) {
            arr[i - B.length + len + 1] += B[i] - '0';
        }

        for (int i = len; i >= 1; i--) {
            if (arr[i] >= 2) {
                arr[i] -= 2;
                arr[i - 1]++;
            }
        }

        boolean flag = false;
        for (int i = 0; i <= len; i++) {
            if (arr[i] == 1) flag = true;

            if (flag) sb.append(arr[i]);
        }

        if (!flag) System.out.println(0);
        else System.out.println(sb);
    }
}
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        BigInteger A = new BigInteger(st.nextToken(), 2);
        BigInteger B = new BigInteger(st.nextToken(), 2);

        System.out.println(A.add(B).toString(2));
    }
}

4. 후기

 

- 배열

- BigInteger