본문 바로가기
TIL/Programmers

[TIL] 2023.09.09 Programmers_이진수 더하기

by heereal 2023. 9. 9.

이진수 더하기

문제 설명

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

 

 

입출력 예

bin1 bin2 result
"10" "11" "101"
"1001" "1111" "11000"

입출력 예 #1

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

입출력 예 #2

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

 

나의 풀이

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

처음에는 아예 2진수 더하기 로직을 코드로 구현하려고 시도했다가 실패했었다. 그러고 며칠 뒤에 다시 풀어보는데 마침 `parseInt()`와 `toString()`을 공부하고 났던 때라 매개변수를 10진수로 변환해서 더한 후에, 그 값을 다시 2진수로 변환하면 되겠다는 생각에 다시 풀어서 통과했다.

 

 

다른 사람의 풀이

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진수끼리 더하기 코드가 궁금하기 때문에 다른 사람의 풀이를 분석해 보려 한다.

 

bin1과 bin2를 number로 변환해서 더한 후에 `reverse()`해서 한 글자씩 담은 'temp'라는 배열을 생성한다. 그리고 for문을 돌면서 요소가 2인 경우, 3인 경우로 나눠서 각각 이진수에 맞는 덧셈을 해준다. 마지막으로 이 배열을 다시 `reverse()`해서 string으로 이어 붙인 후 number로 변환하여 출력한다. 근데 첫 번째 for문에서 temp 배열의 길이를 11로 만들기 위한 부분은 왜 들어가는지 모르겠다.

 

 

댓글