https://www.acmicpc.net/problem/1252
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
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1946번 - 신입 사원 [Java] (0) | 2025.03.18 |
---|---|
[백준] 16479번 - 컵라면 측정하기 [Java] (0) | 2025.03.18 |
[백준] 11501번 - 주식 [Java] (1) | 2025.03.13 |
[백준] 2089번 - -2진수 [Java] (0) | 2025.03.12 |
[백준] 17070번 - 파이프 옮기기 1 [Java] (0) | 2025.03.12 |