[js] 이진수 더하기 (lv.0, 정답률 83%)

sookyoung.k·2024년 5월 8일
post-thumbnail

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

제한사항

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

나의 풀이

function solution(bin1, bin2) {
    let b1 = parseInt(bin1, 2);
    let b2 = parseInt(bin2, 2);
    
    return (b1 + b2).toString(2);
}

원래는 이진수 로직을 쌩으로 작성하고 있었다. 그러던 중 머가 꼬여서 잘 안댔음. 킹받아서 찾아보니까... 내가 원래 알던 parseInt와 toString이 낯설게 느껴질만큼 새로운 내용들을 알게 되었다.

parseInt()

parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.

* parseInt(string) | parseInt(string, radix)

  • string: 파싱할 값, 문자열이 아닐 경우 ToString() 추상 연산을 사용해 문자열로 변환한다. 문자열의 선행 공백은 무시한다.
  • radix: string의 진수를 나타내는 2부터 36까지의 정수이다. 기본값이 10이 아님에 주의. Number 자료형이 아닌 경우 Number로 변환한다.

* Return
→ 주어진 string에서 파싱한 정수입니다.

🤷🏻 NaN이 반환되는 경우

  • radix가 2보다 작거나 36보다 큰 경우.
  • 공백이 아닌 첫 문자를 숫자로 변환할 수 없는 경우.

Number.prototype.toString()

toString() 메서드는 특정한 Number 객체를 나타내는 문자열을 반환합니다.

* numObj.toString([radix]);

  • radic: 수의 값을 나타내기 위해 사용되기 위한 기준을 정하는 2와 36사이의 정수. (진수를 나타내는 기수의 값.)

* Return

  • Number 객체를 명시하는 문자열.

다른 풀이 1

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();
}

다른 풀이 2

function solution(bin1, bin2) {
    return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2)
}

이렇게 하면 문제 푸는 의미가 있냐 없냐로 박터지게 싸우고들 있더라.
있는거 쓰자~... 모르던 것도 많은걸...

profile
영차영차 😎

0개의 댓글