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


문제 설명

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


제한사항

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

입출력 예

bin1bin2result
“10”“11”“101”
“1001”“1111”“11000”

입출력 예 설명

입출력 예 #1

  • 10 + 11 = 101 이므로 “101” 을 return합니다.

입출력 예 #2

  • 1001 + 1111 = 11000 이므로 “11000”을 return합니다.

나의 풀이

function solution(bin1, bin2) {
  var answer = (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);
  return answer;
}

나의 두번째 풀이(Code Refactoring)

function solution(bin1, bin2) {
  return (BigInt("0b" + bin1) + BigInt("0b" + bin2)).toString(2);
}

// 1. BigInt로 , bin1 , bin2에 해당하는 이진수를 '0b'로 십진수로 만들고 다시 이진수 처리
// 2. BigInt메서드는 대개 2^53보다 큰 값에 해당하는 경우에만 사용

참고 할 만한 다른 사람의 코드

function solution(bin1, bin2) {
  let temp = Number(bin1) + Number(bin2);
  temp = [...temp.toString()].reverse().map((v) => +v);

  for (let i = temp.length; i < 11; i++) {
    temp.push(0);
  }

  for (let i = 0; i < temp.length; i++) {
    if (temp[i] === 2) {
      temp[i] = 0;
      temp[i + 1]++;
    } else if (temp[i] === 3) {
      temp[i] = 1;
      temp[i + 1]++;
    }
  }
  return Number(temp.reverse().join("")).toString();
}