자릿수의 합


:raising_hand: 알고리즘 공부 간 기록이 필요한 문제들에 대한 정리를 기록하는 포스트 입니다.


1. 문제 요건


N 개의 숫자가 배열로 주어지고 각 요소의 자릿수의 합 중 큰것 구하기. (같은 경우 실제로 요소값이 큰 값을 리턴)

2. 코드


// 반복문을 통해 직접 자릿수 합 계산
function solution(arr) {
    let max = Number.MIN_SAFE_INTEGER // 최솟값 구하기 위한 defalt 값
    let answer

    for (let x of arr) {
        let sum = 0, tmp = x
        // tmp 가 0이 될때까지 반복
        while (tmp) {
            // 나머지 값으로 각 자리 분리 계산
            sum += (tmp % 10)
            // 다음 자리 구하기 위한 몫 구하기(Math.floor 도 가능)
            tmp = parseInt(tmp / 10)
        }
        // 최대값 Switching 
        if (sum > max) {
            max = sum
            answer = x
        } else if (max === sum) {
            // 같은 값이 나왔을 경우
            if (answer < x) {
                answer = x
            }
        }
    }
    return answer
}
let arr = [137, 460, 603, 40, 521, 128, 123]
// 내장함수 익힘 용
function solution2(arr) {
    let tempArr = []

    for(let i=0; i<arr.length; i++) {
        // 합 구하기
        let sum = arr[i].toString().split('').reduce((acc,v) => {
            return acc + parseInt(v)
        }, 0)
        // tempArr에 동일한 합이 존재하면
        if (tempArr.indexOf(sum) !== -1) {
            // tempArr 에 존재하는 동일 합의 Index 를 통한 값과 현재 값 비교
            if(arr[tempArr.findIndex((el) => el === sum)] > arr[i]) {
                // 현재값이 작으면 0으로 push
                tempArr.push(0)
            } else {
                // 현재값이 더 크면 이전 값 0으로 변경
                tempArr[tempArr.findIndex((el) => el === sum)] = 0
                tempArr.push(sum)
            }
        } else {
            // tempArr 에 값이 존재하지 않으면
            tempArr.push(sum)
        }
    }
    // tempArr 내 최대값의 인덱스를 뽑아서 arr 내 값 Return
    return arr[tempArr.indexOf(Math.max(...tempArr))]
}

let arr = [137, 460, 603, 40, 521, 128, 123]

3. 결과정리


Solution 에서는 각 자릿수의 합을 연산자들을 통하여 계산하였다.

내장함수의 힘을 빌리지 않았고 간단한 if 문을 통해 모든 조건을 걸를 수 있었다. 내장함수의 사용은 좋지만 우리가 실제 면접간 라이브코딩의 경우에는 종종 내장함수 없이 코드를 작성해야 하는 일이 생기기 때문에 이렇게 내장함수 없이 짜는 연습도 열심히 해야 할 것 같다.

반대로 solution2 의 경우 최대한 사용할 수 있는 내장함수를 사용해서 다른 아이디어로 작성하였다. 이런 연습또한 Javascript 의 강점인 내장함수를 익히는데 큰 도움이 될 것이다.

4. Key Point


  1. 연산자만을 통한 자릿 수 합 구하기
  2. 내장함수 사용