이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
return 값은 이진수를 의미하는 문자열입니다.
1 ≤ bin1, bin2의 길이 ≤ 10
bin1과 bin2는 0과 1로만 이루어져 있습니다.
bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
입출력 예
bin1 | bin2 | result |
---|---|---|
"10" | "11" | "101" |
"1001" | "1111" | "11000" |
function solution(bin1, bin2) {
if(bin1 === "0" && bin2 === "0") return "0"
bin1 = `${bin1}`.split("").map(el=>Number(el))
bin2 = `${bin2}`.split("").map(el=>Number(el))
const num = binToNum(bin1) + binToNum(bin2)
return numToBin(num)
}
function binToNum(array) {
for(let i=array.length-1; i>=0; i--){
array[i] *= 2**(array.length-1-i)
}
return array.reduce((누적,현재)=>누적+현재,0)
}
function numToBin(num) {
let arr = []
while(num !== 0){
arr.unshift(num % 2)
num = (num - num%2)/2
}
return arr.join("")
}
매개변수의 값이 모두 "0"일 때, ""로 반환되는 문제가 있어서 최상단에 조건을 추가했다.
if(bin1 === "0" && bin2 === "0") return "0"
찾아보니 n진수 변환 함수가 이미 존재한다.
함수를 이용하면 같은 방식이어도 이렇게나 간단히 구현할 수 있다!
function solution(bin1, bin2) {
return (parseInt(bin1, 2) + parseInt(bin2, 2)) // 2진수를 10진수로
.toString(2) // 10진수를 2진수로
}
속도도 훨씬 빠르다
그리고 bin1과 bin2의 길이를 비교해서 자리수를 맞추고 더해주는 방법도 있겠다.