CODE KATA #23

12499 단어 TILTIL

자리수의 합

N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
입력 설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.

나의 풀이

            function solution(n, arr){
                let answer;
                let candidate = [];
                for (let x of arr) {
                    let cnt = 10;
                    let sum = 0;
                    while(cnt !== 100000) {
                        sum += Math.floor((x%cnt)/(cnt/10));
                        cnt *= 10;
                    }
                    candidate.push(sum);
                }
                maxNum = Math.max(...candidate);
                let indices = [];
                let idx = candidate.indexOf(maxNum);
                while (idx != -1) {
                    indices.push(arr[idx]);
                    idx = candidate.indexOf(maxNum, idx+1);
                }
                answer = Math.max(...indices);
                return answer;
            }

정답 풀이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);
                    }
                    if(sum>max){
                        max=sum;
                        answer=x;
                    }
                    else if(sum===max){
                        if(x>answer) answer=x;
                    }
                }
                return answer;
            }

정답 풀이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;
            }

배울 점

정답 풀이 2에서의 내용을 보면, let sum=x.toString().split('').reduce((a, b)=>a+Number(b), 0);의 내용이 있는데, 이는 arr의 각 원소만큼 반복하는 for문에서 각각의 원소를 의미하는 xstring형태로 변환한후, 한자리씩 다 떼어놓고 reduce함수를 통해 각자리의 합을 구한 값을 sum에 바로 할당해주는 것을 확인할 수 있다. 또한 maxNumber.MIN_SAFE_INTEGER;로 선언해주어 어떤 숫자가 첫번째 sum으로 지정되더라도 max보다 크도록 선언해주었다.

좋은 웹페이지 즐겨찾기