본문 바로가기

Problem Solving/리트코드(leetcode)

[Leetcode/C++] 67. Add Binary


class Solution {
public:
    string addBinary(string a, string b) {
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        int carry = 0;
        string answer = "";
        for(int i = 0; i < min(a.length(),b.length()); i++) {
            if(a[i] == b[i]) {
                carry == 1 ? answer += "1" : answer += "0";
                a[i] == '1' ? carry = 1 : carry = 0;
            } else if(a[i] != b[i] && carry == 1) {
                answer += "0";
                carry = 1;
            } else {
                answer += "1";
                carry = 0;
            }
        }
        cout << answer;
        for(int i = min(a.length(), b.length()); i < max(a.length(), b.length()); i++) {
            if(a.length() > b.length()) {
                a[i] - '0' == carry ? answer += "0" : answer += "1";
                a[i] - '0' == carry && a[i] == '1' ? carry = 1 : carry = 0;
            } else {
                b[i] - '0' == carry ? answer += "0" : answer += "1";
                b[i] - '0' == carry && b[i] == '1' ? carry = 1 : carry = 0;
            }
        }
        if(carry)answer += to_string(carry);
        reverse(answer.begin(), answer.end());
        return answer;
    }
};

뒤집어서 논리설계에서 사용하는 carry-adder 를 사용하여 이진법으로 계산한 이후 남은 부분을 이어붙이고 다시 뒤집어서 출력해주었다.


문제: https://leetcode.com/problems/add-binary/

 

Add Binary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com