Level. 0
문제
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
* 제한사항
- return 값은 이진수를 의미하는 문자열입니다.
- 1 ≤ bin1, bin2의 길이 ≤ 10
- bin1과 bin2는 0과 1로만 이루어져 있습니다.
- bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
풀이
#include <string>
#include <vector>
using namespace std;
string solution(string bin1, string bin2) {
string answer = "";
int num = stoi(bin1, nullptr, 2) + stoi(bin2, nullptr, 2);
if(num == 0) return "0";
while(num > 0){
answer = to_string(num%2) + answer;
num /= 2;
}
return answer;
}
stoi : string to int
int stoi(const string& str, size_t* idx = 0, int base = 10)
- 첫번째인자 : 변경할 문자열
- 두번째인자 : 정수가 나온 다음에 나온 문자의 포인터를 가리킨다. 사용하지 않을 경우 nullptr을 넣는다.
- 세번째인자 : 진수를 의미한다.
다른 풀이
#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;
}
비트연산을 사용한 풀이이다.
다음에 사용할 수 있도록 참고용으로 적어두도록 하자!
https://school.programmers.co.kr/learn/courses/30/lessons/120885?language=cpp
https://blockdmask.tistory.com/333
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] N개의 최소공배수 / 유클리드 호제법 (0) | 2023.08.12 |
---|---|
[프로그래머스] 공원 산책 - Tuple (0) | 2023.08.06 |
[프로그래머스] 바탕화면 정리 (0) | 2023.07.23 |
[프로그래머스] 추억 점수 - map (0) | 2023.07.23 |
[프로그래머스] 달리기 경주 (0) | 2023.07.23 |