10757 큰 수 A+B

Solution 1 (실패)

const input = require('fs').readFileSync('dev/stdin').toString().trim().split(' ').map(Number);
console.log(input.reduce((a + b) => a + b);

문제보고 너무 쉽다고 생각했는데 역시 쉽다고 생각하면 항상 시간초과나 오답처리가 된다. 역시나 이번 문제도 그랬다.

input 을 출력해보면 입력값과 상이하게 출력되는 것을 확인할 수 있다.

9223372036854776000 9223372036854776000

자바스크립트의 숫자타입에도 한계가 있어 정밀하게 출력되기 않는다.

Number 타입이 아닌 BigInt 타입을 사용해야한다. BigInt 는 큰 숫자까지 정밀도있게 표현할 수 있는 타입이다.

공식문서

BigInt 는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체이다.

BigInt와 Number는 어떤 면에서 비슷하지만 중요한 차이점이 있습니다. 예컨대 BigInt는 내장 Math 객체의 메서드와 함께 사용할 수 없고, 연산에서 Number와 혼합해 사용할 수 없습니다. 따라서 먼저 같은 자료형으로 변환해야 합니다. 그러나, BigInt가 Number로 바뀌면 정확성을 잃을 수 있으니 주의해야 합니다.

BigInt 타입을 출력할 땐 문자열로 변환해주어야 숫자 마지막의 n이 함께 출력되지 않는다.

Solution 1 (성공)

const fs = require('fs');
const [a, b] = fs.readFileSync('../input.txt').toString().trim().split(' ').map(BigInt);
console.log((a + b).toString());