연습장

64. 두 수의 합 본문

프로그래머스/0단계

64. 두 수의 합

js0616 2023. 8. 21. 10:40

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