이진수 더하기
문제 설명
이진수를 의미하는 두 개의 문자열 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로 만들기 위한 부분은 왜 들어가는지 모르겠다.