본문 바로가기
알고리즘/Programmers

[TIL] 2023.08.25 Programmers_두 수의 합

by heereal 2023. 8. 26.

두 수의 합

문제 설명

0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 예

a b result
"582" "734" "1316"
"18446744073709551615" "287346502836570928366" "305793246910280479981"
"0" "0" "0"

입출력 예 #1

  • 예제 1번의 a, b는 각각 582, 734이고 582 + 734 = 1316입니다. 따라서 "1316"을 return 합니다.

입출력 예 #2

  • 예제 2번의 a, b는 각각 18446744073709551615, 287346502836570928366이고 18446744073709551615 + 287346502836570928366 = 305793246910280479981입니다. 따라서 "305793246910280479981"을 return 합니다.

입출력 예 #3

  • 예제 3번의 a, b는 각각 0, 0이고 0 + 0 = 0입니다. 따라서 "0"을 return 합니다.

 

나의 풀이

// 초기 답안
function solution(a, b) {
    return (Number(a) + Number(b)).toString();
}

처음 풀이는 `Number()`를 이용했는데 주어진 정수의 값이 클 때 계산이 정확하게 되지 않는 문제가 발생했다.

 

JavaScript의 Number는 부동 소수점으로 표시되기 때문에 정밀도가 제한적이며 number 타입만으로는 모든 수를 다 표현할 수 없다고 한다. JavaScript의 이러한 문제점을 해결하기 위해 `BigInt`라는 데이터 타입이 추가되었는데 BigInt는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있다.

 

function solution(a, b) {
    return (BigInt(a) + BigInt(b)).toString();
}

`Number()`를 `BigInt()`로 수정 후 문제를 통과할 수 있었다.

 

참고문서

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt

https://velog.io/@ywc8851/javascript-Number-vs-BigInt

 

 

댓글