두 수의 합
문제 설명
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
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.09.03 Programmers_최솟값 만들기 (0) | 2023.09.03 |
---|---|
[TIL] 2023.08.27 Programmers_JadenCase 문자열 만들기 (4) | 2023.08.27 |
[TIL] 2023.08.23 Programmers_배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2023.08.24 |
[TIL] 2023.08.17 Programmers_커피 신부름 (0) | 2023.08.17 |
[TIL] 2023.08.16 Programmers_숨어있는 숫자의 덧셈 (2) (0) | 2023.08.16 |
댓글