✏️기록하는 즐거움
article thumbnail

Link

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

두 정수 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 라는 것이 있다는 걸 알았고, 엄청 쉽게 문제를 풀 수 있었다.

자바스크립트 최고에욤... ❤

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!