문제
https://school.programmers.co.kr/learn/courses/30/lessons/181846
풀이
자바스크립트에서 숫자로 형변환을 거칠때 64비트 부호 없는 정수는 0부터 2^64 - 1까지의 범위만을 표현할 수 있다.
때문에 이 값을 넘어가면 오버플로우가 발생해 정확하게 변환되지 않는다.
const num1 = Number("18446744073709551615");
const num2 = Number("287346502836570928366");
console.log(num1); // 18446744073709552000
console.log(num2); // 2.873465028365709e+20
보다 정확하게 표현하기 위해 BigInt를 사용한다.
BigInt는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체이다.
const num1 = BigInt("18446744073709551615");
const num2 = BigInt("287346502836570928366");
console.log(num1); // 18446744073709551615n
console.log(num2); // 287346502836570928366n
따라서 문제 풀이 코드는 다음과 같이 풀 수 있다.
function solution(a, b) {
const num1 = BigInt(a);
const num2 = BigInt(b);
return `${num1 + num2}`;
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 왼쪽 오른쪽 (0) | 2024.01.22 |
---|---|
프로그래머스, 자바스크립트) 특수문자 출력하기 (0) | 2024.01.21 |
프로그래머스, 자바스크립트) qr code (0) | 2024.01.20 |
프로그래머스, 자바스크립트) 영어가 싫어요 (0) | 2024.01.20 |
프로그래머스, 자바스크립트) 공 던지기 (0) | 2024.01.19 |