반응형
Link
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력 > 첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력 > 첫째 줄에 A+B를 출력한다.
| 예제 입력
9223372036854775807 9223372036854775808
| 예제 출력
18446744073709551615
제출
const input = (
process.platform == "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `9223372036854775807 9223372036854775808`
).split(" ");
const [A, B] = input.map(BigInt);
console.log((A + B).toString());
풀이과정
Number.MAX_SAFE_INTEGER 는 자바스크립트가 저장할 수 있는 최대의 안전한 정수이다.
이 값을 출력해보면 9007199254740991 로 이 이상의 값을 저장할 순 있지만 오차가 발생할 수도 있다.
문제에서 주어진 값은 9007199254740991이 넘게 되므로 단순히 A+B를 할 경우에 정확한 계산이 되지 않는다.
BigInt 객체를 사용하여 계산하면 원하는 결과값을 얻을 수 있고, BigInt는 뒤에 'n'이 붙여져 나오므로 toString()으로 결과값을 변환시켜서 콘솔에 출력한다.
개념
Number.MAX_SAFE_INTEGER
- JavaScript에서 안전한 최대 정수값을 나타낸다.
BigInt
- Number 값이 안정적으로 나타낼 수 있는 최대치보다 큰 정수를 표현할 수 있는 내장 객체
- 정수 리터럴 뒤에 n을 붙이거나 정수를 BigInt로 감싸서 생성할 수 있다.
- Number 객체와 비슷하지만 Math 객체를 사용할 수 없고, Number와 혼합해서 사용할 수 없다.
Comment
처음엔 각 숫자를 따로 더해서 10의 거듭제곱으로 더한다음에 출력해야하나... 고민하며 풀었는데
어쨌든 sum에 더해지면 계속해서 숫자 범위가 넘어가기 때문에 오차가 생겼다.
그러던 중 BigInt 라는 것이 있다는 걸 알았고, 엄청 쉽게 문제를 풀 수 있었다.
자바스크립트 최고에욤... ❤
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2581: 소수 (javascript) (0) | 2022.07.07 |
---|---|
[백준] 1978: 소수 찾기 (javascript) (0) | 2022.07.07 |
[백준] 2839: 설탕 배달 (javascript) (0) | 2022.07.07 |
[백준] 2775: 부녀회장이 될테야 (javascript) (0) | 2022.07.07 |
[백준] 10250: ACM 호텔 (javascript) (0) | 2022.07.06 |