본문 바로가기

백준

백준 2729 이진수 덧셈(JAVA)

문제

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

 

2729번: 이진수 덧셈

이진수 덧셈은 매우 간단하고, 십진수 덧셈과 비슷하게 하면 된다. 십진수 덧셈을 할 때는, 오른쪽부터 왼쪽으로 차례대로 숫자 하나씩 더하면 된다. 이진수 덧셈도 이와 비슷하게 하면 된다. 십

www.acmicpc.net

코드

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

import static java.lang.Integer.*;

public class Main {

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

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            String a1 = st.nextToken();
            String b1 = st.nextToken();

            BigInteger a2 = new BigInteger(a1, 2);
            BigInteger b2 = new BigInteger(b1, 2);

            BigInteger ans = a2.add(b2);
            sb.append(ans.toString(2) + "\\n");
        }

        System.out.println(sb.toString());

    }

}

풀이

해당문제는 최대 80자리의 2진수까지 입력받는다. 이를 10진수로 계산하려면 2의 80승을 계산할 수 있어야 하는데 여기서 BigInteger 가 필요하다. 해당 타입은 제한이 없으므로 다음과 같이 계산을 진행하면 된다.

  1. 문자열 형태로 입력을 받는다.
  2. BigInteger 형태로 변환한다. 이때 2진수로 변환한다.
  3. 같은 타입으로 덧셈을 진행하고 2진수로 표현한다.

'백준' 카테고리의 다른 글

백준 10703 유성(JAVA)  (0) 2022.08.19
백준 5766 할아버지는 유명해!(JAVA)  (0) 2022.08.17
백준 18311 왕복 (JAVA)  (0) 2022.08.15
백준 1316 그룹 단어 체커 (JAVA)  (0) 2022.08.15
백준 1316 그룹 단어 체커(JAVA)  (0) 2022.08.15