Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 특정 범위 내의 암스트롱 수(Armstrong Number) 찾는 방법

암스트롱 수란 무엇인가?

암스트롱 수(Armstrong Number)는 각 자릿수를 자릿수 개수만큼 거듭제곱한 값들을 모두 더했을 때, 원래의 숫자와 같아지는 수를 말합니다. 수식으로 표현하면 다음과 같습니다.

xy..z = x^n + y^n + ... + z^n

여기서 n은 해당 숫자의 자릿수를 의미합니다.

예를 들어, 370은 암스트롱 수입니다. 그 이유는 다음과 같습니다.

3^3 + 7^3 + 0^3 = 27 + 343 + 0 = 370

370은 세 자리 숫자이므로 각 자릿수를 세제곱하여 모두 더한 결과가 원래 숫자인 370과 일치하기 때문입니다.

문제 정의

우리가 작성해야 할 JavaScript 함수는 두 개의 숫자, 즉 범위의 시작값과 끝값을 입력받아 그 사이에 있는 모든 암스트롱 수를 배열로 반환해야 합니다. 이때 경계값 자체도 암스트롱 수라면 결과에 포함되어야 합니다.

구현 코드

먼저 하나의 숫자가 암스트롱 수인지 판별하는 헬퍼 함수를 만들고, 이를 활용해 주어진 범위를 순회하는 방식으로 문제를 해결할 수 있습니다.

const isArmstrong = number => {
   let num = number;
   // 숫자의 자릿수 개수 계산
   const len = String(num).split("").length;
   let res = 0;
   while(num){
      // 마지막 자릿수 추출
      const last = num % 10;
      // 자릿수 개수만큼 거듭제곱하여 누적
      res += Math.pow(last, len);
      // 마지막 자릿수 제거
      num = Math.floor(num / 10);
   };
   return res === number;
};
const armstrongBetween = (lower, upper) => {
   const res = [];
   for(let i = lower; i <= upper; i++){
      if(isArmstrong(i)){
         res.push(i);
      };
   };
   return res;
};
console.log(armstrongBetween(1, 400));

코드 설명

isArmstrong 함수는 다음 과정을 거칩니다.

1. String(num).split("").length를 통해 숫자의 자릿수를 구합니다.
2. 반복문 안에서 num % 10으로 마지막 자릿수를 추출하고, Math.pow(last, len)로 자릿수만큼 거듭제곱한 값을 누적합니다.
3. Math.floor(num / 10)으로 처리한 자릿수를 제거하며, num이 0이 될 때까지 반복합니다.
4. 최종적으로 누적된 값이 원래 숫자와 같으면 true, 아니면 false를 반환합니다.

armstrongBetween 함수는 lower부터 upper까지의 모든 숫자를 순회하면서 isArmstrong 검사를 통과한 숫자만 결과 배열에 담아 반환합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.

[
   1,   2, 3, 4,   5,
   6,   7, 8, 9, 153,
   370, 371
]

즉, 1부터 400 사이에는 총 12개의 암스트롱 수가 존재합니다. 한 자리 숫자인 1~9는 모두 암스트롱 수에 해당하며, 세 자리 암스트롱 수인 153, 370, 371도 포함됩니다.