작성
·
116
0
// 자릿수끼리의 합이 제일 많은 것을 출력.
// 같은 경우 원래 숫자가 더 높은 쪽을 출력
function solution(n = 0, arr = []) {
let answer = 0;
let max = Number.MIN_SAFE_INTEGER;
const splitNums = arr.map((val) => (val + "").split(""));
for (let i = 0; i < splitNums.length; i++) {
const temp = splitNums[i].reduce((prev, cur) => +prev + +cur, 0);
if (temp > max) {
max = temp;
answer = arr[i];
} else if (temp === max) answer = arr[i];
}
return answer;
}
console.log(solution(7, [128, 460, 603, 40, 521, 137, 123])); // 137
혼자 풀어봤습니다..
for문 안에 배열 메서드가 들어가는게 좀 이상한 것 같은데 이렇게 써도 무방한지 여쭙고싶습니다.
혹은 수정할 점이 있다면 조언해주시면 감사하겠습니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
코드를 보면 자릿수의 합을 구하고 그중 가장 큰 값을 찾으려고 하시는 것으로 보입니다. 제시해 주신 코드는 이미 잘 작성되어 있으며, 자릿수끼리의 합을 구하기 위해 배열 메서드인 map
, split
, reduce
를 적절히 활용하셨습니다. 이렇게 배열 메서드를 활용하는 것은 자바스크립트에서 일반적이고 추천되는 패턴입니다. 따라서 for문 안에서 배열 메서드를 사용하는 것도 전혀 이상하지 않습니다.
하지만 약간의 개선점을 말씀드리자면, 같은 자릿수 합을 가진 숫자들 중 원래 숫자가 더 높은 쪽을 선택하는 로직에서 else if (temp === max) answer = arr[i];
부분이 잘못되었습니다. 이 코드는 같은 최대 합을 가진 숫자가 있을 때, 마지막으로 발견된 숫자로 answer
를 업데이트하게 합니다. 조건에 따라 원래 숫자가 더 높은 쪽을 선택해야 하므로, 이 부분을 else if (temp === max && arr[i] > answer) answer = arr[i];
로 수정하는 것이 좋겠습니다.
수정된 코드는 다음과 같습니다:
function solution(n = 0, arr = []) {
let answer = 0;
let max = Number.MIN_SAFE_INTEGER;
const splitNums = arr.map((val) => (val + "").split(""));
for (let i = 0; i < splitNums.length; i++) {
const temp = splitNums[i].reduce((prev, cur) => +prev + +cur, 0);
if (temp > max) {
max = temp;
answer = arr[i];
} else if (temp === max && arr[i] > answer) answer = arr[i]; // 수정된 부분
}
return answer;
}
console.log(solution(7, [128, 460, 603, 40, 521, 137, 123])); // 137
이렇게 수정하면 같은 자릿수 합을 가진 숫자들 중에서도 원래 숫자가 더 높은 쪽을 올바르게 출력할 수 있습니다. 코드를 작성하시는 데 있어서 더 궁금한 점이 있으시면 언제든지 질문해주세요!