티어 : Bronze 2
정답여부 : 오답
알고리즘 유형 :수학, 구현, 사칙연산
시간 제한 : 2초

 

 

💡문제

두 개의 이진수를 입력받아 이를 더하는 프로그램을 작성하시오.

 

💡입력

첫째 줄에 두 개의 이진수가 빈 칸을 사이에 두고 주어진다. 각 이진수는 1 또는 0으로만 이루어져 있으며, 0으로 시작할 수도 있다. 또한 각 이진수의 길이는 80을 넘지 않는다.

 

💡출력

첫째 줄에 이진수 덧셈 결과를 출력한다. 결과가 0인 경우를 제외하고는 출력되는 이진수는 항상 1로 시작해야 한다.

 

💡예제 입력1

1001101 10010

 

💡예제 출력1

1011111

 

 

💡문제 분석 

  •  해당 이진수들의 합을 구하면 되는 문제

 

💡알고리즘 설계

  1. 이진수를 String으로 받아와서 다시 Int로 정수로 바꿔준 다음 십진수로 바꿔줌
  2. 둘이 더한 십진수를 다시 이진수로 바꿔줌

 

💡시간복잡도

  • O(N)

 

💡코드

import java.util.*;
import java.io.*;
import java.math.BigInteger;

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());
		String N = st.nextToken();
		String M = st.nextToken();

		// 이진수 문자열을 정수로 변환
		BigInteger nValue = new BigInteger(N, 2);
		BigInteger mValue = new BigInteger(M, 2);
        
         // 두 정수의 합을 계산
		BigInteger sum = nValue.add(mValue);

        // 결과를 이진수 문자열로 출력
        System.out.println(sum.toString());

	}

}

 

💡 틀린 이유

정수형 타입을 int로 받아주면 안된다.

2진수는 80자리까지 가능하다고 한다. 그렇단건 10진수로 바꾸면 2의 80제곱이 넘어선다는 것이다. 그렇다면 long형인 2읜 63제곱을 넘어선다. 그렇기에 BigInteger를 사용하자.

 

💡 틀린 코드 

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

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());
		String A = st.nextToken();
		String B = st.nextToken();
		
		//BigInteger 형변환 하면서 10진수로 바꿔준다.(A, 2)가 10진수로 바꾸는 방법
		BigInteger A_binary = new BigInteger(A, 2);
		BigInteger B_binary = new BigInteger(B, 2);
		
		//합 연산식(add)로 더해서 변수에 저장.
		BigInteger sum = A_binary.add(B_binary);
		
		//풀이방식에 적어둔 대로 2진수로 변환
		String sum_binary = sum.toString(2);
		
		System.out.println(sum_binary);
	}

}

 

💡 느낀점 or 기억할정보

해당 문제에 문제를 잘 읽어야한다.이진수로 변하는 알고리즘은 처음이라 신기하다.