학습(0)/C++ 문제풀이

이진수 더하기

누가 뭐래도 개발자 2025. 3. 17. 00:38
#include <string>
#include <vector>

using namespace std;

string solution(string bin1, string bin2) {
    string answer = "";
    int mx = max(bin1.size(), bin2.size());
    int mn = min(bin1.size(), bin2.size());
    int a = 0, b = 0;
    int cIn = 0, cOut = 0;
   
    while (mx--)
    {
        if (bin1.empty())
            a = 0;
        else
        {
            a = bin1.back() - '0';
            bin1.pop_back();
        }

        if(bin2.empty())
            b = 0;
        else
        {
            b = bin2.back() - '0';
            bin2.pop_back();
        }

        int sum = (a ^ b) ^ cOut;
        cOut = (a & b) | (cIn & (a ^ b));
        cIn = cOut;
        
        answer = to_string(sum) + answer;
    }

    if (cIn)
        answer = '1' + answer;

    return answer;
}

 

 

1. 각 길이를 i, j 변수에 저장.

2. i,j를 인덱스로 이용하여 1 | 2 | c가 존재한다면 반복한다. (1,2가 끝난다면 남은 캐리 처리)

3. 인덱스가 남아있다면 배열의 값을, 아니라면 0.

4. carry는 하나로 해결.

 

멋있다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(string bin1, string bin2) {
    string answer = "";
    int i = bin1.size() - 1;
    int j = bin2.size() - 1;
    int carry = 0;

    while (i >= 0 || j >= 0 || carry) {
        int a = (i >= 0) ? bin1[i--] - '0' : 0;
        int b = (j >= 0) ? bin2[j--] - '0' : 0;

        int sum = (a ^ b) ^ carry;
        carry = (a & b) | (carry & (a ^ b));

        answer = to_string(sum) + answer;
    }

    return answer;
}

'학습(0) > C++ 문제풀이' 카테고리의 다른 글

v평행  (0) 2025.03.17
저주의 숫자 3  (0) 2025.03.17
A로 B 만들기  (0) 2025.03.16
삼각형의 완성 조건2  (0) 2025.03.16
안전지대  (0) 2025.03.16