💼 가장 큰 자릿수 합 찾기
🧾 문제 설명
숫자판에 N개의 양의 정수가 주어집니다. 각 숫자의 자릿수의 합을 구하고, 그 합이 가장 큰 숫자를 출력하십시오. 만약 자릿수의 합이 같다면 숫자 자체가 더 큰 수를 출력합니다.
📥 입력 예시
let numbers = [305, 989, 743, 88, 998, 277, 91];
📤 입력 예시
998
🎯 목표
- 각 숫자의 자릿수 합을 구함
- 최대 자릿수 합을 가진 숫자를 찾음
- 합이 같은 경우 숫자 자체가 큰 쪽을 선택
📚 풀이 과정
💡 접근 방법
- 각 숫자를 순회하며 자릿수 합을 계산
- 기존 최대값과 비교 후 갱신
- 동점일 경우 숫자 값 비교로 승자를 결정
📝 내 풀이
function solution(n, arr) {
let maxNum = 0;
let maxSum = 0;
for (let num of arr) {
const stringNum = num.toString();
let sum = 0;
for (let i = 0; i < stringNum.length; i++) {
sum += parseInt(stringNum[i]);
}
if ((maxSum === sum && maxNum < num) || maxSum < sum) {
maxSum = sum;
maxNum = num;
}
}
return maxNum;
}
let numbers = [305, 989, 743, 88, 998, 277, 91];
console.log(solution(7, arr)); // 998
✅ 정답 코드
정답 보기 🔍
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;
}
let numbers = [305, 989, 743, 88, 998, 277, 91];
console.log(solution(7, arr)); // 998
📌 마무리 회고
- 내 풀이: 직관적이며 문자열 변환 방식이라 이해가 쉽지만,
toString()과parseInt()로 인한 약간의 오버헤드가 있음. - 정답 풀이: 숫자 연산만 사용해 조금 더 효율적이며, 조건문을 분리하여 가독성이 높음.