[JS][백준]2729_이진수 덧셈.
Algorithm/BaeKJoon

[JS][백준]2729_이진수 덧셈.

문제 번호

 

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();

특이사항