IF - 자릿수의 합

Goody·2021년 4월 8일
0

알고리즘

목록 보기
81/122

문제

N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력
하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다.
만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.


예시

InputOutput
[128, 460, 603, 40, 521, 137, 123]137

풀이 및 회고

  • 주어진 숫자들의 배열을 자릿수의 합과 원래 숫자를 프로퍼티로 갖는 객체들로 이뤄진 배열로 매핑한다.
  • 자릿수의 합을 기준으로 배열을 정렬하고, 자릿수의 합이 가장 큰 객체들만 따로 모아둔다.
  • 자릿수의 합이 가장 큰 객체들 중 원래 숫자가 가장 큰 숫자를 찾아 반환한다.
  • 완전탐색 문제지만 내가 완전탐색을 하고 있는지 잘 모르겠을 정도로 쉬운 문제였다.

코드

const solution = (numbers) => {
    const maxCandidates = [];
    let maxSum = 0;
    let maxNum = 0;

    const numObjects = numbers.map((el) => {
        const str = el + '';
        const arr = str.split('');
        const sum = arr.reduce((acc, cur) => {
            return acc += Number(cur);
        }, 0);
        return ({ number: el, sum: sum })
    });
    
    numObjects.sort((a, b) => b.sum - a.sum);
    for (let i = 0; i < numObjects.length; i++) {
        if (numObjects[i].sum >= maxSum) {
            maxSum = numObjects[i].sum;
            maxCandidates.push(numObjects[i]);
        }
        else break;
    }

    maxCandidates.forEach((el) => {
        if (el.number > maxNum) maxNum = el.number;
    });
    
    return maxNum;
}

0개의 댓글