N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.
자릿수의 합이 최대인 자연수를 출력한다.
▣ 입력예제 1
▣ 출력예제 1
function solution(n, arr) {
let answer;
let max = Number.MIN_SAFE_INTEGER;
// arr 를 돌면서 각 값을 split으로 쪼개서 num에 넣어주고, ['1', '2', '8'], ['4', '6', '0'] ...
for (let x of arr) {
let sum = 0;
let tmp = x;
tmp = tmp.toString().split("");
for (let y of tmp) {
sum += Number(y);
}
if (sum > max) {
max = sum;
}
}
answer = max;
return answer;
}
let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));
function solution(n, arr) {
let answer;
let max = Number.MIN_SAFE_INTEGER;
/**
* 각 배열의 숫자들을 자릿수마다 더해준다.
* x 를 돌면서 각 값을 문자열화 해서,
* split으로 쪼개서 num에 넣어주고,
* ['1', '2', '8'], ['4', '6', '0'] ...
*/
for (let x of arr) {
let sum = arr
.toString()
.split("")
.reduce((a, b) => a + Number(b));
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));
arr
를 for ...in
문으로 돌고,for (let x of arr) {
}
arr
를 문자열로 변환한 뒤, split('')
로 쪼깨서 배열로 반환하고, reduce()
로 자릿수가 모두 더해질 수 있도록 한다. 더해질 때 숫자로 더해질 수 있도록 b
를 Number()
메소드로 문자열에서 숫자로 변환한 것을 sum
변수에 할당한다.for (let x of arr) {
let sum = arr
.toString()
.split("")
.reduce((a, b) => a + Number(b));
}
max
를 설정한다.let max = Number.MIN_SAFE_INTEGER;
sum
결과값이 임의의 최대값 max
보다 크다면, 해당 sum
이 max
로 할당할 수 있도록 했다. 또한, 그 최대값에 해당하는 원본 배열 arr
의 요소 x 값을 answer
에 할당한다.for (let x of arr) {
let sum = arr
.toString()
.split("")
.reduce((a, b) => a + Number(b));
if (sum > max) {
max = sum;
answer = x;
}
}
sum
과 max
가 동일할 경우(똑같은 결과 값이 있을 때)를 처리해주어야 한다. 이때는 만약 위에서 위에서 할당한 answer
값이 원본 배열 arr
의 요소인 x
보다 작다면, (x
가 더 크다면) answer
에 x
를 할당하도록 했다.function solution(n, arr) {
let answer;
let max = Number.MIN_SAFE_INTEGER;
for (let x of arr) {
let sum = 0;
let 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;
}
let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));
function solution(n, arr) {
let answer;
let 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));
function solution(n, arr) {
let answer;
let max = Number.MIN_SAFE_INTEGER;
for (let x of arr) {
/**
* 각 배열의 숫자들을 자릿수마다 더해준다.
* x 를 돌면서 각 값을 문자열화 해서,
* split으로 쪼개서 num에 넣어주고,
* ['1', '2', '8'], ['4', '6', '0'] ...
*/
let sum = x
.toString()
.split("")
.reduce((a, b) => a + Number(b), 0);
// 만약 sum이 max 보다 크다면
if (sum > max) {
// max는 sum이 되고, (가장 큰 값이 들어감)
max = sum;
// 이때 마지막으로 가장 큰 값이 max가 될 때
// answer에 해당 배열 요소 x를 할당한다.
answer = x;
// 만약 동일한 결과 값이 있다면,
} else if (sum === max) {
// 그리고 만약 answer 결과 값보다 x(원래 값)가 크다면 그게 answer로 할당.
if (x > answer) answer = x;
// 원본 요소가 더 큰 값을 answer에 할당한다.
}
}
return answer;
}
let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));