새소식

Programmers Coding Test/Java

[프로그래머스 120885] Java - 코딩테스트 입문 / 이진수 더하기

  • -

이진수 더하기

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

 

 

1)  문제

이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 
두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
return 값은 이진수를 의미하는 문자열입니다.
1 ≤ bin1, bin2의 길이 ≤ 10
bin1과 bin2는 0과 1로만 이루어져 있습니다.
bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

 

 

 

2)  예시

 

 

Result Table
bin1 bin2 result
"10" "11" "101"
"1001" "1111" "11000"

 

 

입출력 예 #1
10 + 11 = 101 이므로 "101" 을 return합니다.


입출력 예 #2
1001 + 1111 = 11000 이므로 "11000"을 return합니다.

 

 

 

 

 

3)  풀이

 

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 문자열 bin1, bin2를 매개변수로 하는 solution 메소드를 선언합니다.

solution은 문자열을 반환하므로 데이터타입을 String으로 합니다.

●     public String solution(String bin1, String bin2) {

 

 

 

 

3. Integer.parseInt 메소드를 이용하여 bin1을 십진법의 정수로  변환합니다. 

이 때, 괄호안 2는 bin1이 이진법의 문자열임을 나타냅니다. 

bin2 또한 같은 방식으로 정수로 변환합니다.

 

bin1과 bin2를 합친 값을 sum으로 정의합니다.

●     int num1 = Integer.parseInt(bin1, 2);
        int num2 = Integer.parseInt(bin2, 2);
       
       int sum = num1 + num2;

        

 

 

 

4. 최종적인 결과 result를 정의해주는데, Integer.toBinaryString 메소드를 이용해 sum을 이진법 문자열로 변환합니다.

Integer클래스를 이용하여 결과가 정수로 나오는 것으로 헷갈릴 수 있으나, 정수를 이용하여 이진법 문자열로 변환하여 결과값은 String이 되게 됩니다.

●      String result = Integer.toBinaryString(sum);

        return result;
    }
}

 

 

 

 

 

4)  코드

 

class Solution {
    public String solution(String bin1, String bin2) {

        int num1 = Integer.parseInt(bin1, 2);
        int num2 = Integer.parseInt(bin2, 2);
        

        int sum = num1 + num2;
        

        String result = Integer.toBinaryString(sum);

        return result;
    }
}

 

 

 

 

 

 

 

 

 

 

5)  느낀점

 

처음 문제 해결을 어떻게 할까 고민했을 때,

하나의 이진수를 정수로 변환하는 메소드를 만들고,

그 메소드를 이용해서 bin1, bin2 값을 계산하여 더해주는 식으로 진행하려고 했습니다.

그래서 이진수의 가장 첫째 자리부터 1인지 0인지 판단을 하고,

몇번째 자리인지 확인하여 해당 자릿수만큼 2를 반복해서 곱해주도록하여 값을 구해내도록하려 했습니다.

하지만 이렇게 할 경우, 코드가 상당히 길어졌습니다.

 

또한, 다시 문자열로 바꿔줘야하는 과정이 필요해서 이 해결방식은 효율적이지 않다고 생각했습니다.

 

자료들을 찾아내 공부한 결과, parseInt로 십진수 정수로 변환 ,

tobinaryString으로 이진수로 문자열로 변환이 가능하단 사실을 알았고,

위 풀이와 같이 해결할 수 있었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.