이번 글에서는 두 개의 숫자 a와 b를 입력받아 두 숫자 사이의 자릿수 거리(digit distance)를 반환하는 JavaScript 함수를 작성해 보겠습니다.
자릿수 거리란?
두 숫자의 자릿수 거리는 각 자리에 해당하는 숫자들끼리의 차이를 절댓값으로 구한 뒤, 이를 모두 더한 값입니다.
예를 들어 다음과 같은 두 숫자가 있다고 가정해 보겠습니다.
345 678
이 경우 자릿수 거리는 다음과 같이 계산됩니다.
|3-6| + |4-7| + |5-8| = 3 + 3 + 3 = 9
구현 방법
두 숫자를 문자열로 변환한 후, 각 자리의 숫자를 하나씩 비교하며 차이의 절댓값을 누적하면 됩니다. 두 숫자의 길이가 다를 경우에도 올바르게 동작하도록 반복 범위를 설정하는 것이 중요합니다.
다음은 전체 코드입니다.
const num1 = 345;
const num2 = 678;
const digitDistance = (a, b) => {
const aStr = String(a);
const bStr = String(b);
let diff = 0;
// 두 문자열 중 더 긴 길이만큼 반복하여 자릿수를 비교
const maxLen = Math.max(aStr.length, bStr.length);
for (let i = 0; i < maxLen; i++) {
diff += Math.abs(+(aStr[i] || 0) - +(bStr[i] || 0));
}
return diff;
};
console.log(digitDistance(num1, num2));코드 설명
String()을 사용해 숫자를 문자열로 변환하면 인덱스로 각 자릿수에 쉽게 접근할 수 있습니다.Math.max()로 두 문자열 중 더 긴 길이를 구해 반복 횟수를 정하므로, 자릿수가 다른 숫자(예: 1234와 99)도 정확하게 처리할 수 있습니다.aStr[i] || 0부분은 존재하지 않는 자릿수를 0으로 처리해 오류 없이 계산이 진행되도록 합니다.Math.abs()를 통해 각 자릿수 차이의 절댓값을 구하고 이를diff변수에 누적합니다.
출력 결과
콘솔에서 실행하면 다음과 같은 결과가 출력됩니다.
9
마무리
이처럼 숫자를 문자열로 변환하고 각 자릿수를 순회하며 비교하는 간단한 방식으로 자릿수 거리를 손쉽게 구할 수 있습니다. 자릿수가 다른 숫자를 처리하는 로직까지 포함하면 더 견고한 함수를 만들 수 있습니다.