본문 바로가기

Algorithm/Programers - C++

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

 

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 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://blockdmask.tistory.com/333

 

[C++] stoi, stof, stol, stod 함수에 대해서 (string to int)

안녕하세요. BlockDMask 입니다. 지난시간에는 C/C++에 기존에 존재하던 atoi, atof, atol등 char* 타입의 문자열을 정수로, 실수로 (=숫자로) 변경하는 함수에 대해서 살펴 보았습니다. 오늘은! C++11에서 부

blockdmask.tistory.com