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

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

암스트롱 수(Armstrong Number)란, 양의 정수의 각 자릿수를 자릿수의 개수(n)만큼 거듭제곱한 값들을 모두 더했을 때 그 합이 원래 수와 같아지는 수를 말합니다.

abcd... = a^n + b^n + c^n + d^n + ...

예를 들어 153은 세 자리 수이며, 1³ + 5³ + 3³ = 1 + 125 + 27 = 153이므로 암스트롱 수에 해당합니다.

문제 정의

정확히 두 개의 숫자를 요소로 가지는 배열, 즉 범위를 나타내는 배열을 입력받는 JavaScript 함수를 작성해야 합니다. 이 함수는 해당 범위 안에 속한 모든 암스트롱 수를 배열 형태로 반환해야 하며, 시작 숫자와 끝 숫자 역시 암스트롱 수라면 결과에 포함되어야 합니다.

접근 방식

먼저 주어진 숫자가 암스트롱 수인지 판별하는 함수를 별도로 작성합니다. 이후 범위의 시작 값부터 끝 값까지 반복문을 돌면서 각 숫자를 판별 함수로 검사하고, 암스트롱 수인 경우에만 결과 배열에 추가하는 방식으로 문제를 해결할 수 있습니다.

예제 코드

다음은 전체 구현 코드입니다.

const range = [11, 1111];
const isArmstrong = (num) => {
    const numberOfDigits = ('' + num).length;
    let sum = 0;
    let temp = num;
    while (temp > 0) {
        let remainder = temp % 10;
        sum += remainder ** numberOfDigits;
        temp = parseInt(temp / 10);
    }
    return sum === num;
};
const findAllArmstrong = ([start, end]) => {
    const res = [];
    for(let i = start; i <= end; i++){
        if(isArmstrong(i)){
            res.push(i);
        };
    };
    return res;
};
console.log(findAllArmstrong(range));

코드 설명

isArmstrong 함수: 숫자를 문자열로 변환해 자릿수 개수를 구한 뒤, while 반복문에서 10으로 나눈 나머지를 이용해 일의 자리 숫자를 하나씩 추출합니다. 추출한 숫자를 자릿수 개수만큼 거듭제곱하여 합계에 더하고, 모든 자릿수를 처리한 후 합계가 원래 숫자와 같은지 비교해 참 또는 거짓을 반환합니다.

findAllArmstrong 함수: 구조 분해 할당으로 시작 값과 끝 값을 꺼낸 후, for 반복문으로 범위 내 모든 숫자를 검사하고 암스트롱 수로 판별된 숫자만 결과 배열에 push합니다.

출력 결과

콘솔에는 다음과 같은 결과가 출력됩니다.

[ 153, 370, 371, 407 ]

범위 [11, 1111] 내에서 발견된 암스트롱 수는 총 네 개이며, 각각 다음과 같이 검증됩니다.

  • 153 = 1³ + 5³ + 3³
  • 370 = 3³ + 7³ + 0³
  • 371 = 3³ + 7³ + 1³
  • 407 = 4³ + 0³ + 7³