
내가 생각했을때 문제에서 원하는부분
첫째 줄에 테스트 케이스의 수 T(1<=T<=1,000)가 주어진다.
각 테스트 케이스는 숫자 2개로 이루어져있다.
이 숫자는 0과 1로만 이루어진 이진수이며,
길이는 최대 80자리이다. (덧셈 결과는 81자리가 될 수도 있다) 이진수는 0으로 시작할 수도 있다.
각 테스트 케이스에 대해 입력으로 주어진 두 이진수의 합을 구해 이진수로 출력한다.
숫자의 앞에 불필요한 0이 붙으면 안 된다.
내가 이 문제를 보고 생각해본 부분
해당문제는 최대 80자리의 2진수까지 입력받는다.
이를 10진수로 계산하려면 2의 80승을 계산할 수 있어야 하는데 여기서 BigInteger 가 필요하다.
해당 타입은 제한이 없으므로 다음과 같이 계산을 진행하면 된다.
문자열 형태로 입력을 받는다.
BigInteger 형태로 변환한다. 이때 2진수로 변환한다.
같은 타입으로 덧셈을 진행하고 2진수로 표현한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;
// 백준 2729번 문제
public class Main839 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < N; i++) {
StringTokenizer 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)).append("\n");
}
System.out.println(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.