이번 글에서는 하나의 숫자를 입력받아, 짝수 번째 자리(인덱스 0, 2, 4, ...)에 있는 숫자들의 합과 홀수 번째 자리(인덱스 1, 3, 5, ...)에 있는 숫자들의 합 사이의 차이를 반환하는 JavaScript 함수를 작성해 보겠습니다.
문제 이해하기
숫자를 오른쪽 끝 자릿수부터 0번 인덱스로 시작해 왼쪽 방향으로 하나씩 번호를 매깁니다. 그다음 짝수 인덱스 자릿수는 더하고, 홀수 인덱스 자릿수는 뺀 뒤, 최종 결과의 절댓값을 반환하면 됩니다.
예를 들어 숫자가 345336이라면 다음과 같습니다.
- 오른쪽부터 자릿수: 6, 3, 3, 5, 4, 3
- 짝수 인덱스(0, 2, 4) 자릿수의 합: 6 + 3 + 4 = 13
- 홀수 인덱스(1, 3, 5) 자릿수의 합: 3 + 5 + 3 = 11
- 두 합의 차이: |13 − 11| = 2
예제 코드
const num = 345336;
const evenOddDifference = (num) => {
let res = 0;
let ind = 0;
while (num > 0) {
const digit = num % 10;
// 짝수 인덱스 자릿수는 더하고, 홀수 인덱스 자릿수는 뺍니다
res += ind % 2 === 0 ? digit : -digit;
num = Math.floor(num / 10);
ind++;
}
return Math.abs(res);
};
console.log(evenOddDifference(num));
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
2
코드 설명
- num % 10: 현재 숫자의 가장 오른쪽 자릿수를 추출합니다.
- Math.floor(num / 10): 이미 처리한 마지막 자릿수를 제거해 다음 자릿수로 이동합니다.
- ind: 현재 처리 중인 자릿수의 인덱스를 나타내며, 한 자릿수를 처리할 때마다 1씩 증가합니다.
- Math.abs(res): 짝수 자리 합에서 홀수 자리 합을 뺀 값이 음수가 될 수 있으므로 절댓값으로 변환해 반환합니다.
이 방식은 숫자를 문자열로 변환하지 않고도 산술 연산만으로 모든 자릿수를 순회할 수 있어 간결하고 효율적입니다.