문제 소개
숫자 배열을 첫 번째이자 유일한 인자로 받아 처리하는 JavaScript 함수를 작성해 보겠습니다. 이 함수가 수행해야 할 작업은 다음과 같습니다.
- 배열에서 가장 작은 숫자를 찾습니다.
- 찾은 숫자의 모든 자릿수를 더해 합계를 구합니다.
- 자릿수 합이 짝수이면
true, 홀수이면false를 반환합니다.
입력 예시
const arr = [12, 657, 23, 56, 34, 678, 42];
이 경우 기대되는 출력 결과는 다음과 같습니다.
const output = false;
그 이유는 배열에서 가장 작은 숫자가 12이고, 자릿수 합은 1 + 2 = 3으로 홀수이기 때문입니다.
구현 코드
위 문제를 해결하는 전체 코드는 아래와 같습니다.
const arr = [12, 657, 23, 56, 34, 678, 42];
const addDigits = (num = 1, sum = 0) => {
if(!num){
return sum;
};
return addDigits(Math.floor(num / 10), sum + (num % 10));
};
const findSmallest = (arr = []) => arr.reduce((acc, val) => Math.min(acc, val));
const checkSmallestSum = (arr = []) => {
const smallest = findSmallest(arr);
const smallestSum = addDigits(smallest);
return smallestSum % 2 === 0;
};
console.log(checkSmallestSum(arr));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
false
코드 동작 원리
이제 코드가 어떻게 동작하는지 단계별로 자세히 살펴보겠습니다.
1. addDigits — 자릿수 합을 구하는 재귀 함수
addDigits 함수는 재귀 호출을 통해 자릿수 합을 계산합니다. Math.floor(num / 10)으로 숫자를 한 자리씩 줄여가고, num % 10으로 마지막 자릿수를 분리해 누적합(sum)에 더합니다. 숫자가 0이 되면 지금까지 누적된 합을 반환하며 재귀를 종료합니다.
2. findSmallest — 배열의 최솟값 찾기
findSmallest 함수는 배열의 reduce() 메서드와 Math.min()을 조합해 배열 전체를 순회하며 가장 작은 값을 효율적으로 찾아냅니다. 초기 누적값 없이 첫 번째 요소부터 비교를 시작하는 방식입니다.
3. checkSmallestSum — 전체 로직 조립
마지막으로 checkSmallestSum 함수는 앞서 정의한 두 함수를 차례대로 호출해 최솟값과 그 자릿수 합을 구한 뒤, smallestSum % 2 === 0 조건식으로 합이 짝수인지 판별하여 최종 불리언 값을 반환합니다.