Lv.0 - 이진수 더하기_01.01

송철진·2023년 1월 1일
0

문제 설명

이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

제한사항
return 값은 이진수를 의미하는 문자열입니다.
1 ≤ bin1, bin2의 길이 ≤ 10
bin1과 bin2는 0과 1로만 이루어져 있습니다.
bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

입출력 예

bin1bin2result
"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의 길이를 비교해서 자리수를 맞추고 더해주는 방법도 있겠다.

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글