본문 바로가기
Leetcode

67. Add Binary

by Doromi 2024. 5. 3.
728x90
반응형

두 이진 문자열을 입력으로 받아 그 합을 이진 문자열로 반환하는 문제입니다.

public class Solution {
    public string AddBinary(string a, string b) {
        StringBuilder sb = new StringBuilder();
        int i = a.Length -1, j = b.Length -1, carry = 0;
        while(i >= 0 || j >= 0){
            int sum = carry;
            if(j >= 0) sum += b[j--] - '0';
            if(i >= 0) sum += a[i--] - '0';
            sb.Insert(0,(char)((sum%2)+'0'));
            carry = sum/2;
        }
        if(carry != 0){
            sb.Insert(0,'1');
        }

        return sb.ToString();
    }
}
a와 b의 문자열 길이의 -1 부터 시작하는 이유는 덧셈이 가장 낮은 자릿수에서 시작하여 가장 높은 자릿수로 진행되기 때문에 필요합니다.
각 자리의 합을 담는 변수인 sum을 선언합니다.
각 자리의 숫자는 char 값에서 '0'의 유니코드 값을 빼줌으로써, 실제 숫자로써의 0또는 1의 값을 가져올 수 있습니다.
합을 구한 후, 2로 나눈 나머지의 값을 '0' 유니코드 값과 합해주어 char 값의 0또는 1을 string builder 맨 앞에 추가합니다.
두 string이 끝날 때까지 반복한 후, 마지막 올림이 있는지 확인하여 맨 앞에 1을 추가할 지 안할 지 구별해줍니다.

 

728x90
반응형