JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, LV.0] 이진수 더하기

sundori 2024. 12. 11. 14:47

목차

    문제 설명

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


     

    제한사항

    • return 값은 이진수를 의미하는 문자열입니다.
    • 1 ≤ bin1, bin2의 길이 ≤ 10
    • bin1과 bin2는 0과 1로만 이루어져 있습니다.
    • bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

     

    class Solution {
        public String solution(String bin1, String bin2) {
            StringBuilder result = new StringBuilder(); // 결과를 저장할 StringBuilder 객체를 초기화
            int carry = 0; // 이진수 덧셈에서 발생할 수 있는 올림수를 저장하기 위한 변수
    
            // 두 문자열의 끝에서부터 시작하여 올림수가 존재하거나 두 문자열의 자리수가 남아있는 동안 반복
            for (int i = bin1.length() - 1, j = bin2.length() - 1; i >= 0 || j >= 0 || carry > 0; i--, j--) {
                // 문자열 a에서 현재 자리의 비트를 가져오고, 인덱스가 음수이면 0으로 간주
                int bitA = (i >= 0) ? bin1.charAt(i) - '0' : 0;
                // 문자열 b에서 현재 자리의 비트를 가져오고, 인덱스가 음수이면 0으로 간주
                int bitB = (j >= 0) ? bin2.charAt(j) - '0' : 0;
    
                // 현재 자리 비트와 올림수를 더하여 합을 계산
                int sum = bitA + bitB + carry;
                result.append(sum % 2); // 합의 나머지를 결과에 추가 (0 또는 1)
                carry = sum / 2; // 합이 2 이상이면 올림수를 설정
            }
    
            return result.reverse().toString(); // 결과 문자열을 뒤집어서 반환
        }
    }

    코드 설명

    1. 입력받은 이진수 처리:
      • 입력값 a와 b는 이진수 문자열이다.
      • 뒤에서부터 차례로 계산하기 위해 각각의 마지막 인덱스에서 시작한다.
    2. 이진수 합 계산:
      • 각 자리의 숫자를 더하고, 더한 값의 나머지(sum % 2)를 결과에 추가한다.
      • 올림수(carry)는 sum / 2를 사용해 계산한다.
    3. 남은 자리와 올림 처리:
      • 두 이진수가 끝난 후에도 carry가 존재하면 추가로 처리한다.
    4. 결과 반환:
      • StringBuilder의 reverse()를 사용하여 최종 결과를 반환한다.
    728x90