문제
https://school.programmers.co.kr/learn/courses/30/lessons/120885
💻 풀이
풀이 1 - 진법 변환 이용
2진수를 10진수로 변환해서 계산 후, 다시 2진수로 변환하기
function solution(bin1, bin2) {
const sum = parseInt(bin1, 2) + parseInt(bin2, 2);
return sum.toString(2);
}
풀이 2 - 2진수 자릿수 올림 이용
- 예를 들어 1001 + 1111을 숫자 그대로 더하면 2110이 된다.
- 맨 뒷자리부터 검사해서 만약 숫자가 2라면 그 자릿수는 0으로 바꾸고 앞자리에는 1을 더해준다.
- 원래 2였는데 뒷자리로부터 1을 올림받아 3이 된 경우도 있을 것이다. 그런 경우에는 그 자릿수를 1로 바꾸고 앞자리에 1을 더한다.
- 0번 인덱스의 경우에는 올려줄 앞자리가 없으므로 unshift()를 이용해 앞자리에 올림한 값을 덧붙여준다.
function solution(bin1, bin2) {
let sum = (Number(bin1) + Number(bin2)).toString().split('');
sum = sum.map(n => Number(n));
const result = [];
for(let i = sum.length - 1; i >= 0; i--) {
if(sum[i] === 2) {
sum[i] = 0;
i === 0 ? sum.unshift(1) : sum[i - 1] += 1;
} else if(sum[i] === 3) {
sum[i] = 1;
i === 0 ? sum.unshift(1) : sum[i - 1] += 1;
}
}
return sum.join('');
}
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.0 | 영어가 싫어요 js (0) | 2023.08.06 |
---|---|
프로그래머스 Lv.0 | 소인수분해 (0) | 2023.07.19 |
프로그래머스 Lv.0 | 문자열 계산하기 (0) | 2023.07.08 |
프로그래머스 Lv.0 | 공던지기 (0) | 2023.07.08 |
프로그래머스 Lv.0 | 구슬을 나누는 경우의 수 (0) | 2023.07.07 |