Oddish와 Evenish란?
숫자의 모든 자릿수를 더한 합계가 홀수이면 해당 숫자를 Oddish(홀디시), 합계가 짝수이면 Evenish(이븐니시)라고 부릅니다.
예를 들어 434667의 각 자릿수를 더하면 4 + 3 + 4 + 6 + 6 + 7 = 30으로 짝수이므로, 이 숫자는 Evenish에 해당합니다.
문제 요구 사항
주어진 숫자가 Oddish인지 Evenish인지 판별하는 함수를 작성해야 하며, 반환 값은 다음과 같습니다.
- 숫자가 Oddish이면
true - 숫자가 Evenish이면
false
재귀를 활용한 해결 방법
재귀 함수를 사용하면 반복문 없이도 코드를 매우 간결하게 작성할 수 있습니다. 숫자를 10으로 나눈 몫을 계속 재귀적으로 전달하면서 각 자릿수를 누적 합산하고, 마지막에 합계가 홀수인지만 검사하면 됩니다.
예제 코드
const num = 434667;
const isOddish = (num, sum = 0) => {
if(num){
return isOddish(Math.floor(num / 10), sum + (num % 10));
};
return sum % 2 === 1;
};
console.log(isOddish(num));
실행 결과
false
코드 동작 원리
- 자릿수 추출:
num % 10연산으로 현재 숫자의 마지막 자릿수를 구합니다. - 재귀 호출:
Math.floor(num / 10)으로 마지막 자릿수를 제거한 값을 다시 함수에 전달하고, 방금 추출한 자릿수를sum에 더해 누적합니다. - 종료 조건:
num이 0이 되면 재귀가 종료되며, 누적된 합계를 2로 나눈 나머지가 1인지(즉 홀수인지) 확인해 결과를 반환합니다.
위 예제에서 434667의 자릿수 합은 30으로 짝수, 즉 Evenish에 해당하기 때문에 콘솔에는 false가 출력됩니다. 만약 자릿수 합이 홀수인 숫자(예: 123 → 1 + 2 + 3 = 6은 짝수이므로 false, 111 → 3은 홀수이므로 true)를 넣으면 결과가 달라지는 것을 직접 확인해 볼 수 있습니다.