연습장
64. 두 수의 합 본문
Q. 0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요.
단순히 더하게 된다면
'582' + '734' = '582734' 가 되고
Number(a) + Number(b) 로 하면
1316이 나오지면
2번째 예시의 경우에는 계산이 되지않는다.
16 자리가 넘어가게되면 계산이 되지않는 문제가있다.
따라서 다음과 같이 해결하였다.
// 16자리 이상 계산시 오류
// 1. 문자열을 뒤집고
// 2. 배열로 만들어서
// 3. 같은 인덱스 끼리 더하고
// 4. 10이상일 경우 다음 인덱스에 1 추가하고 -10 해준다.
// 5. 배열을 합치고
// 6. 다시 뒤집는다.
// 문자열 뒤집는 함수
const revStr = function(str){
let rev = ''
for(let i = str.length-1 ; i >= 0 ; i--){
rev += str[i]
}
return rev
}
function solution(a, b) {
var answer = '';
let c = []
// 16자리 이상 계산시 오류
// 1. 문자열을 뒤집고
a = revStr(a)
b = revStr(b)
// 2. 배열로 만들어서
a = a.split('')
b = b.split('')
// 3. 길이에 따라서 같은 인덱스 끼리 더하고
let temp = 0
if(a.length < b.length){
temp = a
a = b
b = temp
}
if(a.length >= b.length){
for(let i = 0 ; i< b.length; i++){
c.push(Number(a[i])+Number(b[i]))
}
for(let i = b.length; i<a.length; i++){
c.push(Number(a[i]))
}
}
// 4. 원소가 10이상일 경우 다음 인덱스에 1 추가하고 -10 해준다.
for(let i = 0 ; i<c.length ; i++){
if(c[i] >= 10){
c[i]= c[i]-10
c[i+1] = c[i+1]+1
}
}
if(c.length > a.length){
c[c.length-1] = 1
}
// 5. 배열을 합치고
c=c.join('')
// 6. 다시 뒤집는다.
answer = revStr(c)
return answer;
}
다른 풀이
const solution = (a, b) => String(BigInt(a) + BigInt(b))
Number 로 바꿀경우엔 16자리 이상부턴 0으로 표기되는 문제가 있는데
BigInt 라는 함수로 문자를 숫자로 만들면 계산이 잘 되나보다.
'프로그래머스 > 0단계' 카테고리의 다른 글
0단계 후기 (0) | 2023.08.21 |
---|---|
63. 정수를 나선형으로 배치하기 (0) | 2023.08.21 |
62. 안전지대 (0) | 2023.08.20 |
61. 겹치는 선분의 길이 (0) | 2023.08.20 |
60. 평행 (0) | 2023.08.20 |