주니어 기초 코딩공부/JAVA_programmers_코딩테스트

이진수 더하기_programmers_lev00

jju_developer 2022. 12. 27. 15:00
728x90

<코딩 테스트>

문제 설명
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return 하도록 solution 함수를 완성해 주세요.

<나의 풀이 과정>

 

방법 1) valueOf 사용

두 번째 인수에서 지정한 기수로 구문 분석할 때 지정한 문자열에서 추출한 값을 포함하는 Integer 개체를 반환합니다.

첫 번째 인수는 두 번째 인수에 의해 지정된 기수에서 부호 있는 정수를 나타내는 것으로 해석되며,

마치 인수가 parseInt(java.lang)에 주어진 것처럼 정확하게 해석됩니다.

문자열, int) 메서드입니다. 결과는 문자열로 지정된 정수 값을 나타내는 정수 개체입니다.

 

방법 2) BigInteger 사용

1. 입력된 2진수를 10진수로 바꾼다.

2. 바꾼 값을 더한다.

3. 더한 값을 2진수로 바꾼다. 

 

심플하지만 어떤 함수를 적용할지 정수형은 어떤 걸 써야 할지 잘 파악해야 합니다. 

진수 변화를 하기 위해선 우선 정수형을 파악하자.
2진수는 80자리까지 가능하다고 한다. 그렇단건 10진수로 바꾸면 2의 80제곱이 넘습니다. 

그렇다면 long형인 2의 63 제곱을 넘기 때문에 BigInteger를 사용했습니다.

 

그렇게 바꾼 값들을 add로 더해주고, 2진수로 바꿔주었습니다.

방식은 BIgInteger를 String으로 형변환 하면서 2를 넣어주는 것입니다.

형변환 방법은 변수. toString()이고, 2진수로 바꾸려면 괄호 안에 2를 넣어주면 됩니다.

 

<나의 풀이 코드>

public String solution(String bin1, String bin2) {
		String answer = "";
		int result = Integer.valueOf(bin1, 2) + Integer.valueOf(bin2, 2);

		// BigInteger 형변환 하면서 10진수로 바꿔준다.(A, 2)가 10진수로 바꾸는 방법
		BigInteger bin1_binary = new BigInteger(bin1, 2);
		BigInteger bin2_binary = new BigInteger(bin2, 2);

		// 합 연산식(add)로 더해서 변수에 저장.
		BigInteger sum = bin1_binary.add(bin2_binary);

		// 풀이방식에 적어둔 대로 2진수로 변환
		String sum_binary = sum.toString(2);

		return sum_binary;
//		System.out.println(sum_binary);
	}
}

<다른 사람 풀이>

class Solution {
    public String solution(String bin1, String bin2) {
        return Integer.toString(Integer.parseInt(bin1, 2) + Integer.parseInt(bin2, 2),2);
    }
}

<다른 사람 풀이>

class Solution {
    public String solution(String bin1, String bin2) {
        String answer = "";

        int a = Integer.parseInt(bin1,2);
        int b = Integer.parseInt(bin2,2);
        answer = Integer.toBinaryString(a+b);
        return answer;
    }
}

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120913

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

728x90