이번 글에서는 하나의 숫자를 입력받아, 짝수 번째 자리에 있는 자릿수들의 합과 홀수 번째 자리에 있는 자릿수들의 합 사이의 차이를 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
문제 이해하기
예를 들어 숫자 123456이 주어졌다고 가정해 봅시다. 오른쪽 끝자리부터 세었을 때, 짝수 번째(0번째, 2번째, 4번째) 자릿수는 6, 4, 2이고 그 합은 12입니다. 홀수 번째(1번째, 3번째, 5번째) 자릿수는 5, 3, 1이고 그 합은 9입니다. 따라서 두 합의 차이는 |12 − 9| = 3이 됩니다.
접근 방법
이 문제는 재귀 함수를 사용하면 간단하게 해결할 수 있습니다.
- 숫자를 10으로 나눈 나머지(
num % 10)를 이용해 가장 뒤의 자릿수를 하나씩 추출합니다. - 현재 인덱스가 짝수면 결과값에 더하고, 홀수면 뺍니다.
- 숫자를 10으로 나눈 몫(
Math.floor(num / 10))으로 재귀 호출을 반복합니다. - 숫자가 0이 되면 누적된 값의 절댓값을 반환합니다.
구현 코드
const num = 123456;
const alternateDifference = (num, res = 0, ind = 0) => {
if(num){
if(ind % 2 === 0){
res += num % 10;
}else{
res -= num % 10;
};
return alternateDifference(Math.floor(num / 10), res, ++ind);
};
return Math.abs(res);
};
console.log(alternateDifference(num));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
3
코드 설명
함수 alternateDifference는 세 개의 매개변수를 받습니다.
num: 처리할 숫자res: 지금까지 계산된 누적 차이 (기본값 0)ind: 현재 처리 중인 자릿수의 위치 (기본값 0)
매번 재귀 호출될 때마다 마지막 자릿수를 추출하여 인덱스에 따라 더하거나 빼고, 숫자가 모두 소진되면 최종적으로 Math.abs()를 통해 절댓값을 반환합니다. 이렇게 하면 어떤 순서로 계산되었든 두 합의 차이가 항상 양수로 출력됩니다.