
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const [a, b] = fs.readFileSync(path).toString().trim().split('\n');
let and = '';
let or = '';
let xor = '';
let notA = '';
let notB = '';
for (let i = 0; i < 100000; i++) {
and += a[i] === '1' && b[i] === '1' ? 1 : 0;
or += a[i] === '1' || b[i] === '1' ? 1 : 0;
xor += a[i] !== b[i] ? 1 : 0;
notA += a[i] === '1' ? 0 : 1;
notB += b[i] === '1' ? 0 : 1;
}
console.log(and);
console.log(or);
console.log(xor);
console.log(notA);
console.log(notB);
⏰ 소요한 시간 : -
비트연산을 공부하려고 풀었던 문제인데... 문자열을 다루는 문제였다.
문제에서 두 이진수는 100,000자리의 숫자. 즉, 100,000비트의 이진수를 처리해야 한다.
하지만 자바스크립트에서는 Number 타입은 64비트의 부동소수점으로 처리하며, 비트 연산은 32비트까지만 지원한다.
그래서 이 문제는 비트 연산으로 풀이할 수 없고, 두 수를 문자열로 탐색해야 한다.
두 문자열을 1부터 100,000의 자리까지 순회하면서, 각 연산을 수행해주면 된다.