백준/Java

[백준 자바] 2729번(이진수 덧셈)

gamzaggang7 2024. 6. 20. 12:51
728x90

난이도 - 브론즈 1

문제

이진수 덧셈은 매우 간단하고, 십진수 덧셈과 비슷하게 하면 된다. 십진수 덧셈을 할 때는, 오른쪽부터 왼쪽으로 차례대로 숫자 하나씩 더하면 된다. 이진수 덧셈도 이와 비슷하게 하면 된다. 십진수 덧셈은 외워야 할 덧셈이 많지만, 이진수 덧셈은 아래와 같이 5가지만 기억하면 된다.

  • 0 + 0 = 0
  • 1 + 0 = 1
  • 0 + 1 = 1
  • 1 + 1 = 10
  • 1 + 1 + 1 = 11

두 이진수가 주어졌을 때, 그 합을 이진수로 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 수 T(1<=T<=1,000)가 주어진다. 각 테스트 케이스는 숫자 2개로 이루어져있다. 이 숫자는 0과 1로만 이루어진 이진수이며, 길이는 최대 80자리이다. (덧셈 결과는 81자리가 될 수도 있다) 이진수는 0으로 시작할 수도 있다.

출력

각 테스트 케이스에 대해 입력으로 주어진 두 이진수의 합을 구해 이진수로 출력한다. 숫자의 앞에 불필요한 0이 붙으면 안 된다.

 


 

728x90

로직은 1252번에 사용한 코드와 같다.

2024.06.20 - [백준/Java] - [백준 자바] 1252번(이진수 덧셈) - 정규표현식, String.format()

 

[백준 자바] 1252번(이진수 덧셈) - 정규표현식, String.format()

난이도 - 브론즈 2문제두 개의 이진수를 입력받아 이를 더하는 프로그램을 작성하시오.입력첫째 줄에 두 개의 이진수가 빈 칸을 사이에 두고 주어진다. 각 이진수는 1 또는 0으로만 이루어져 있

gamzaggang7.tistory.com

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

public class Main2729 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    int T = Integer.parseInt(br.readLine());

    while (T-- > 0) {
      StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      String b1 = st.nextToken().replaceAll("^0+", "");
      String b2 = st.nextToken().replaceAll("^0+", "");

      if (b1.length() == 0)
        b1 = "0";
      if (b2.length() == 0)
        b2 = "0";

      bw.write(binarySum(b1, b2) + '\n');
    }

    bw.flush();
    br.close();
    bw.close();
  }

  static String binarySum(String b1, String b2) {
    StringBuffer result = new StringBuffer();

    int maxLength = Math.max(b1.length(), b2.length());

    b1 = String.format("%" + maxLength + "s", b1).replace(' ', '0');
    b2 = String.format("%" + maxLength + "s", b2).replace(' ', '0');

    int carry = 0;
    for (int i = maxLength - 1; i >= 0; i--) {
      int sum = (b1.charAt(i) - '0') + (b2.charAt(i) - '0') + carry;
      result.append(sum % 2);
      carry = sum / 2;
    }

    if (carry == 1)
      result.append(carry);

    return result.reverse().toString();
  }
}

 

728x90