CODE KATA #23
자리수의 합
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
문에서 각각의 원소를 의미하는 x
를 string
형태로 변환한후, 한자리씩 다 떼어놓고 reduce
함수를 통해 각자리의 합을 구한 값을 sum
에 바로 할당해주는 것을 확인할 수 있다. 또한 max
를 Number.MIN_SAFE_INTEGER;
로 선언해주어 어떤 숫자가 첫번째 sum
으로 지정되더라도 max
보다 크도록 선언해주었다.
Author And Source
이 문제에 관하여(CODE KATA #23), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@loopbackseal/CODE-KATA-23저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)