#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;
}