Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

디지털 루트 정렬 알고리즘 JavaScript

<시간/>

일부 양의 정수의 자릿수 근은 모든 자릿수의 합으로 정의됩니다. 정수 배열이 제공됩니다. 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 ]