(JS 알고리즘) 체크섬

자릿수의 합

N개의 정수가 주어졌을 때 각 정수의 자릿수를 합산하여 합이 가장 큰 정수를 반환하는 프로그램을 작성하세요. 체크섬이 같으면 원래 숫자가 더 큰 숫자가 답입니다. 235와 1234가 동시에 답이 될 수 있다면 1234가 답으로 반환되어야 합니다.

입력 설명
자연수의 개수 N(3<=N<=100)은 첫 번째 줄에, N개의 자연수는 다음 줄에 주어진다.
모든 자연수의 크기는 10,000,000을 초과하지 않습니다.

종료 설명
자릿수의 합이 가장 큰 자연수를 반환합니다.

입력 예
128 460 603 40 521 137 123

출력 예
137

// 나의 풀이

function solution(n, arr){
    let answer = 0;
    let prev = 0;
    let num = 0;

    for (let i of arr) {
        let str = i.toString()
        for (let j = 0; str.length > j; j++) {
            prev += parseInt(str(j))
        }
        if (prev >= num) {
            num = prev
            answer = i
        } else if (prev === num && i > answer) {
            answer = i
        }
        prev = 0
    }

    return answer;
}

let arr=(128, 460, 603, 40, 521, 137, 123);
console.log(solution(7, arr));

for…of 문 이후에 i는 문자열로 변환되어 루프가 다시 실행되고 숫자로 변환된 후 계산이 수행됩니다.

// 강의의 풀이 1

function solution(n, arr){
    let answer, max=Number.MIN_SAFE_INTEGER;
    for(let x of arr){
        let sum=0, tmp=x;
        while(tmp){
            sum+=(tmp%10); 
            tmp=Math.floor(tmp/10); // 10으로 나눠서 0이 될 때 까지
        }
        if(sum>max){
            max=sum;
            answer=x;
        }
        else if(sum===max){
            if(x>answer) answer=x;
        }
    }
    return answer;
}

let arr=(128, 460, 603, 40, 521, 137, 123);
console.log(solution(7, arr));

수학적 계산을 사용하는 솔루션 방법이 사용되었습니다. tmp%10을 사용하면 일의 자리만 남고, Math.floor(tmp/10)를 사용하면 십의 ​​자리 이상만 남기 때문에 합계를 쉽게 찾을 수 있습니다.

// 강의의 풀이 2

function solution(n, arr){
    let answer, max=Number.MIN_SAFE_INTEGER;
    for(let x of arr){
        let sum=x.toString().split('').reduce((a, b)=>a+Number(b), 0);
        if(sum>max){
            max=sum;
            answer=x;
        }
        else if(sum===max){
            if(x>answer) answer=x;
        }
    }
    return answer;
}

let arr=(128, 460, 603, 40, 521, 137, 123);
console.log(solution(7, arr));

변환 후 split으로 문자열을 잘라내고 Reduce로 합계를 계산합니다. 솔루션을 보면 이것이 가장 많이 사용되는 공식이라고 생각합니다.

현재값 입력 부분에 숫자를 적용하면 숫자형으로 변환이 가능한 것 같습니다.