[프로그래머스 / C++] 이진수 더하기

YH·2023년 7월 16일
0

문제

이진수 더하기 : 문제 링크


문제 분석

  • 이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return
  • 문자열 -> 2진수 -> 10진수 -> 덧셈 -> 2진수 -> 문자열 -> reverse의 순서로 연산을 진행하도록 문제를 풀었다.
  • 문자열을 뒤집을 때 사용하는 reverse() 함수를 사용하기 위해 algorithm 헤더를 include. 주어진 두 개의 문자열을 stoi를 통해 2진수 형태로 변환 후, 2진수를 10진수로 변환하는 함수 twoToten을 통해 10진수로 변환한다. 변수 x에 두값을 더한것을 저장하고, 2진수로 변환하여 문자열에 저장한다. 저장된 문자열을 반대로 뒤집어야 하므로, algorithm 헤더를 include하고 reverse 함수를 사용했다.
  • 두 문자열이 모두 "0"인 경우 "0"을 return 하도록 예외처리 했다.

algorithm 헤더의 reverse() 함수 사용법
1. 배열
reverse(a, a+5); => a 배열의 처음부터 다섯번째 요소까지 뒤집음
2. 문자열, 벡터
1) reverse(str.begin(), str.end()); => 문자열 str의 처음부터 끝까지 뒤집음
2) reverse(v.begin()+1, v.end()-1); => 벡터 v의 두번째부터 마지막 이전 요소까지 뒤집음


풀이

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

using namespace std;

int twoToten(int num) {
    int result = 0, mul = 1;
    while(num > 0) {
        if(num % 2 == 1) result += mul;
        mul *= 2;
        num /= 10;
    }
    return result;
}

string solution(string bin1, string bin2) {
    string answer = "";
    int num1 = twoToten(stoi(bin1));
    int num2 = twoToten(stoi(bin2));
    int x = num1 + num2;
    
    if(bin1 == "0" && bin2 == "0") return "0";
    
    while(x != 0) {
        if(x % 2 == 1) answer.push_back('1');
        else answer.push_back('0');
        x /= 2;
    }
    
    reverse(answer.begin(), answer.end());
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글