Algorithm/BaeKJoon
[JS][백준]2729_이진수 덧셈.
JaeKwan
2022. 4. 8. 09:52
문제 번호
2729번: 이진수 덧셈
이진수 덧셈은 매우 간단하고, 십진수 덧셈과 비슷하게 하면 된다. 십진수 덧셈을 할 때는, 오른쪽부터 왼쪽으로 차례대로 숫자 하나씩 더하면 된다. 이진수 덧셈도 이와 비슷하게 하면 된다. 십
www.acmicpc.net
알고리즘 분류
문제 풀이
이진수의 덧셈을 직접구현한다. 입력받은 두개의 수 중에서 더 긴쪽의 길이만큼 더 짧은쪽에 0을 채워서 넣는다.
let max = s1.length > s2.length ? s1.length : s2.length;
s1 = s1.padStart(max+1, '0');
s2 = s2.padStart(max+1, '0');
이후 보통 숫자를 계산하는 방법대로 계산하면된다.
function main() {
let answer = '';
let input = require('fs').readFileSync('input.txt').toString().trim().split('\n');
const T = +input[0];
for (let i = 1; i <= T; i++) {
let [s1, s2] = input[i].trim().split(' ');
let max = s1.length > s2.length ? s1.length : s2.length;
s1 = s1.padStart(max+1, '0');
s2 = s2.padStart(max+1, '0');
s1 = s1.split('').map(Number);
s2 = s2.split('').map(Number);
s1 = s1.reverse();
s2 = s2.reverse();
let ar = 0;
let ret = [];
for (let j = 0; j <= max; j++) {
if (s1[j] + s2[j] + ar >= 2) { // 각 자리의 합이 2를 넘어가면 carry 가 발생해서 다음자리로 넘어간다.
ret.push(s1[j] + s2[j] + ar - 2);
ar = 1;
} else {
ret.push(s1[j] + s2[j] + ar);
ar = 0;
}
}
for(let j=ret.length-1; j>=0; j--) { // 필요없는 0 제거.
if(ret[j] === 0) ret.pop();
else break;
}
if(ret.length === 0) ret = [0]; // 결과값이 0 일때.
answer += ret.reverse().join('') + '\n';
}
console.log(answer.trim())
}
main();
특이사항