https://school.programmers.co.kr/learn/courses/30/lessons/120885
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 구하는 함수를 구현해야 합니다.
ex) bin1 = "1001", bin2 = "1111" -> result = "11000"
조건
- return 값은 이진수를 의미하는 문자열입니다.
- 1 ≤ bin1, bin2의 길이 ≤ 10
- bin1과 bin2는 0과 1로만 이루어져 있습니다.
- bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
풀이 방법
#include <bitset>의 to_ulong() 함수를 사용하면 됩니다.
이때 주의할 점은 최대 이진수 범위를 설정해줘야 한다는 것입니다.
조건에서 bin의 최대 길이가 10이라 하더라도, 두 수를 더하면 이진수의 최대 길이는 늘어날 수 있습니다.
예를 들어, bin1 = "1111111111", bin2 = "1111111111"라고 해봅시다.
이때 두 수의 합을 이진수로 표현하면 "11111111110"로, 10의 범위를 초과하게 됩니다.
그러므로 bitset 함수를 사용할 경우, 최대 사이즈를 고정하기 때문에 bitset<10> sum이 아닌 범위를 더 늘려야 합니다.
또한, 결과값 역시 고정된 bitset 사이즈로 출력되기 때문에, 예를 들어 bitset<10>로 설정했을 경우, bin1 = "1001", bin2 = "1111"의 답은 "11000"이 아닌 "0000011000"으로 출력됩니다. 따라서 문자열 파싱에도 유의해야 합니다.
아래는 to_ulong()의 간단한 예시코드 입니다.
#include <iostream>
#include <bitset>
using namespace std;
int main() {
// 8비트 이진수 정의
bitset<8> binary("1010"); // 이진수 "1010"은 10진수 10
// to_ulong()으로 10진수 변환
unsigned long decimal = binary.to_ulong();
// 출력
cout << "Binary: " << binary << '\n';
cout << "Decimal: " << decimal << '\n';
return 0;
}
//Binary: 00001010
//Decimal: 10
풀이 코드
#include <string>
#include <vector>
#include <bitset>
using namespace std;
int position;
string solution(string bin1, string bin2) {
string answer = "";
bitset<10> bit1(bin1);
bitset<10> bit2(bin2);
unsigned long sum = bit1.to_ulong() + bit2.to_ulong();
answer = bitset<12>(sum).to_string();
for(int i=0; i<answer.size(); i++){
if(answer[i] == '1'){
position = i;
break;
}
}
if(position == 0) return "0";
else{
answer.erase(0, position);
return answer;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.1 햄버거 만들기 c++ (0) | 2025.01.11 |
---|---|
[프로그래머스] Lv.2 영어 끝말잇기 c++ (0) | 2025.01.10 |
[프로그래머스] Lv.1 옹알이 (2) c++ (0) | 2025.01.09 |
[프로그래머스] Lv.0 유한소수 판별하기 c++ (0) | 2025.01.09 |
[프로그래머스] Lv.3 금과 은 운반하기 c++ (0) | 2025.01.08 |