일부 양의 정수의 자릿수 근은 모든 자릿수의 합으로 정의됩니다. 정수 배열이 제공됩니다. a의 자릿수 근이 b의 자릿수 근보다 작거나 같으면 b 앞에 오는 방식으로 정렬해야 합니다. 두 숫자의 자릿수 근이 같으면 작은 숫자(일반적인 의미에서)가 먼저 와야 합니다. 예를 들어, 4와 13은 동일한 자릿수 루트를 갖지만4 <13이므로 둘 다 있는 모든 digitRoot 정렬에서 4가 13 앞에 옵니다.
예를 들어,
for a = [13, 20, 7, 4], the output should be [20, 4, 13, 7].
이 문제에 대한 코드를 작성해 봅시다 -
우리는 그것을 두 개의 함수, 즉 숫자의 자릿수의 합을 계산하는 재귀 함수와 자릿수의 합을 기준으로 요소를 정렬하는 정렬 함수로 나눌 것입니다.
이에 대한 코드는 -
예시
const arr = [54, 23, 8, 89, 26]; const recursiveCount = (num, count = 0) => { if(num){ return recursiveCount(Math.floor(num/10), count+num%10); }; return count; }; const sorter = (a, b) => { const countDifference = recursiveCount(a) - recursiveCount(b); return countDifference || a - b; }; arr.sort(sorter); console.log(arr);
출력
콘솔의 출력은 -
[ 23, 8, 26, 54, 89 ]