https://school.programmers.co.kr/learn/courses/30/lessons/120885
- stoi로 이진수를 숫자로 바꾼 뒤 더해가면서 계산 -> 오버플로우로 실패
- 받은 이진수 문자열을 int형 벡터에 옮겨담은 뒤 한자리 한자리마다 계산해서
결과를 저장한 뒤 string으로 옮겨주기 -> 성공인데 주먹구구식
vector로 옮김 -> 계산 -> string으로 옮기기 -> 완성한 문자열에서 앞자리 0을 다 제거 , answer 가 0인경우 따로 0 문자 추가
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> ToArr(vector<int> inArr, string inBin)
{
for(int i = inArr.size() - inBin.size();i < inArr.size();i++)
{
inArr[i] = inBin[i - inArr.size() + inBin.size()] - '0';
}
return inArr;
};
string solution(string bin1, string bin2) {
string answer = "";
vector<int> arr1(11,0);
vector<int> arr2(11,0);
arr1 = ToArr(arr1,bin1);
arr2 = ToArr(arr2,bin2);
vector<int> arr3;
int over = 0;
for(int i = arr1.size() - 1; i >= 0; i--)
{
int a = arr1[i] + arr2[i] + over;
over = 0;
if(a == 3)
{
arr3.push_back(1);
over = 1;
}
else if(a == 2)
{
arr3.push_back(0);
over = 1;
}
else if(a == 1)
arr3.push_back(1);
else
arr3.push_back(0);
}
if(over)
arr3.push_back(1);
for(int i = arr3.size() - 1; i >= 0; i--)
{
answer += to_string(arr3[i]);
}
if(answer[0] == '0')
answer.erase(0, answer.find("1"));
if(answer.size() == 0)
answer += '0';
return answer;
}
#include <bits/stdc++.h>
using namespace std;
string solution(string bin1, string bin2) {
int a = 0, b = 0;
for (auto ch : bin1) a = a << 1 | ch - 48;
for (auto ch : bin2) b = b << 1 | ch - 48;
string ret;
for (int n = a + b; n; n >>= 1) ret = char(n % 2 + 48) + ret;
return ret.empty() ? "0" : ret;
}
이진수 문자열을 십진수 int로 바꾼 뒤 더하고 n % 2 -> 사실상 이진수의 1의자리 숫자 -> n % 2 + 48 -> 이진수의 1의자리 숫자를 char형으로 만든것.
char 에 ret을 더해주므로 왼쪽으로 char가 쌓여간다. 마지막으로 return 할 때 empty를 체크해서 0을 반환하거나 ret 을 반환해준다.
#include <string>
#include <vector>
#include <bitset>
using namespace std;
string solution(string bin1, string bin2) {
auto tmp = bitset<32>(bitset<32>(bin1).to_ulong() + bitset<32>(bin2).to_ulong()).to_string();
int ind = 0;
while(tmp[ind] == '0')
{
ind++;
}
if(ind == tmp.size())
{
ind--;
}
return tmp.substr(ind);
}
bitset 을 이용하여 두 이진수를 더해준다.
그 후 while문을 돌려서 앞자리 0의 범위를 구해준 뒤 tmp에서 그 부분을 제거해준다.