개요

이진수가 a,b 들어오는데 이진수 덧셈해서 리턴하는 문제이다

 

Add Binary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

풀이

어떻게 덧셈이 이루어지는지는 알고있었는데 구현을 상당히 애먹어서 단순히 parseInt로 주어진 이진수를 십진수로 만들어 더하고 다시 이진수로 변환해주었다. 그런데 값이 js의 표현범위를 벗어났을 때 에러가 출력됐고 BigInt로 값을 더할 수 있다는 것을 확인했다.

 

이후 정석적인 덧셈을 확인하고 추가해놓았다.

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function (a, b) {
  // 이진덧셈 구현하기
  // const sum = parseInt(a, 2) + parseInt(b, 2);
  // return sum.toString(2);
  //   return (BigInt("0b" + a) + BigInt("0b" + b)).toString(2);

  // Truth Table
  // 1st + 2nd + carry = sum, new carry, decimal sum
  //   0 +  0  + 0 = 0, 0 (0)
  //   0 +  0  + 1 = 1, 0 (1)
  //   0 +  1  + 1 = 0, 1 (2)
  //   1 +  1  + 1 = 1, 1 (3)

  let carry = 0;
  let result = "";

  let len1 = a.length - 1;
  let len2 = b.length - 1;

  // for문에 조건을 여러 개 담을 수 있고 활용한 것을 처음 보았다.
  for (; len1 >= 0 || len2 >= 0 || carry > 0; len1--, len2--) {
    let sum = (+a[len1] || 0) + (+b[len2] || 0) + carry;
    if (sum > 1) {
      sum = sum % 2;
      carry = 1;
    } else {
      carry = 0;
    }
    result = `${sum}${result}`;
  }
  return result;
};

 

 

복사했습니다!