이진수를 의미하는 두 개의 문자열 bin1
과 bin2
가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
bin1
, bin2
의 길이 ≤ 10bin1
과 bin2
는 0과 1로만 이루어져 있습니다.bin1
과 bin2
는 "0"을 제외하고 0으로 시작하지 않습니다.bin1 | bin2 | result |
---|---|---|
"10" | "11" | "101" |
"1001" | "1111" | "11000" |
두 번째 방법으로 일단 시도..
기본 테스트는 통과했으나, 최종적인 테스트는 통과하지 못했다. 테스트를 통과하지 못해서 두개의 숫자가 자리수가 다른 경우까지 고려해서 코드를 구현해봤으나, 역시 통과하지 못했다. 내 알고리즘이 커버하지 못하는 테스트 케이스가 있다는 것ㅜ
function solution(bin1, bin2) {
const maxBinLength = Math.max(bin1.length, bin2.length)
const bin1Arr = [...bin1].reverse()
const bin2Arr = [...bin2].reverse()
if (bin1Arr.length !== maxBinLength) {
for (let i = 0; i < maxBinLength - bin1Arr.length; i++) {
bin1Arr.push('0')
}
}
if (bin2Arr.length !== maxBinLength) {
for (let i = 0; i < maxBinLength - bin2Arr.length; i++) {
bin2Arr.push('0')
}
}
const resultArr = []
let upNumber = '0'
for (let i = 0; i < maxBinLength; i++) {
console.log(Number(bin1Arr[i]) + Number(bin2Arr[i]) + Number(upNumber))
if (Number(bin1Arr[i]) + Number(bin2Arr[i]) + Number(upNumber) === 0) {
resultArr.push('0')
} else if (
Number(bin1Arr[i]) + Number(bin2Arr[i]) + Number(upNumber) ===
1
) {
console.log('11')
resultArr.push('1')
} else if (
Number(bin1Arr[i]) + Number(bin2Arr[i]) + Number(upNumber) ===
2
) {
resultArr.push('0')
upNumber = '1'
} else if (
Number(bin1Arr[i]) + Number(bin2Arr[i]) + Number(upNumber) ===
3
) {
resultArr.push('1')
upNumber = '1'
}
}
if (upNumber === '1') {
resultArr.push('1')
}
return resultArr.reverse().join('')
}
그래서 다시 첫 번째 방법으로 시도했다.
이 방법은 크게 실패할 일이 없을 거라 생각했지만, ‘0’ + ‘0’ 일때의 경우의 수를 생각하지 못해서 마지막 즈음에 해당 조건을 넣어서 최종적으로 해결했다.
function solution(bin1, bin2) {
const bin1Arr = [...bin1].reverse()
let bin1Result = 0
const bin2Arr = [...bin2].reverse()
let bin2Result = 0
for (let i = 0; i < bin1Arr.length; i++) {
bin1Result += 2 ** i * Number(bin1Arr[i])
}
for (let i = 0; i < bin2Arr.length; i++) {
bin2Result += 2 ** i * Number(bin2Arr[i])
}
const resultArr = []
const sumResult = bin1Result + bin2Result
let quotient = sumResult
while (quotient !== 0) {
resultArr.push(quotient % 2)
quotient = Math.floor(quotient / 2)
}
if (bin1 === '0' && bin2 === '0') {
resultArr.push('0')
}
return resultArr.reverse().join('')
}
parseInt로 2진수를 10진수로 변환한 다음에 더하고 최종적으로 toString으로 다시 2진수로 변환하는 코드..
function solution(bin1, bin2) {
return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2)
}
이번건 바로 코드를 작성하기보다는 좀 더 생각해보고 접근하려고 노력했다. 하지만 그렇다고 해도 아직 생각하는 힘이 많이 부족한 것 같다.