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

Java로 두 정수 사이의 암스트롱 수 찾기 – 알고리즘과 예제 코드


암스트롱 수(Armstrong Number)란?

이 글에서는 Java를 사용해 주어진 두 정수 사이에 있는 암스트롱 수를 찾아 출력하는 방법을 알아봅니다. 암스트롱 수란 각 자릿수를 세제곱하여 모두 더한 합이 원래의 수와 같아지는 수를 의미합니다.

좀 더 일반적으로 설명하면, 어떤 정수의 각 자릿수를 분리한 뒤 세제곱하여 합산한 결과가 원래 수와 동일하다면 그 수를 암스트롱 수라고 합니다. 즉, abcd... = a³ + b³ + c³ + d³ + ... 의 관계가 성립합니다.

3자리 암스트롱 수의 경우, 각 자릿수의 세제곱 합이 그 수 자신과 같습니다. 대표적인 예로 153이 있습니다.

153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153

또 다른 예로 371 역시 암스트롱 수입니다.

371 = 3³ + 7³ + 1³ = 27 + 343 + 1 = 371

그렇다면 두 수 사이에 존재하는 모든 암스트롱 수를 찾으려면 어떻게 해야 할까요? 아래에서 입력값과 출력값 예시를 통해 살펴보겠습니다.

입력

예를 들어 다음과 같은 입력이 주어졌다고 가정합니다.

1 & 500

출력

원하는 출력 결과는 다음과 같습니다.

1부터 500 사이의 암스트롱 수: 1, 153, 370, 371, 407

알고리즘

Step 1 - 시작
Step 2 - 네 개의 정수 변수 선언: my_input_1, my_input_2, i, sum
Step 3 - 사용자에게 두 개의 정수 값을 입력받거나 정수를 직접 정의
Step 4 - 값을 읽어 들임
Step 5 - %, /, * 연산자를 활용한 for 반복문으로 암스트롱 수 생성
Step 6 - 'check' 변수를 10으로 나눈 나머지(remainder)를 구함
Step 7 - 'rem'을 세 번 곱한 후 'sum'에 더하고, 그 값을 현재 'sum'으로 설정
Step 8 - 'check'를 10으로 나눈 몫을 현재 'check'로 설정
Step 9 - 결과 출력
Step 10 - 종료

예제 1: 사용자 입력을 받는 경우

아래 예제에서는 Scanner 객체를 통해 사용자로부터 직접 입력을 받아 처리합니다. 코딩 실습 도구에서 이 예제를 직접 실행해 볼 수도 있습니다.

import java.util.Scanner;
public class ArmstrongNumbers {
    public static void main(String args[]){
        int input_1, input_2, check, rem, sum, i;
        Scanner my_scanner = new Scanner(System.in);
        System.out.println("필요한 패키지가 임포트되었습니다");
        System.out.println("Scanner 객체가 정의되었습니다");
        System.out.println("첫 번째 숫자를 입력하세요 :");
        input_1 = my_scanner.nextInt();
        System.out.println("상한값을 입력하세요 :");
        input_2 = my_scanner.nextInt();
        System.out.println("암스트롱 수는 다음과 같습니다 :");
        for (i = input_1; i<input_2; i++){
            sum = 0;
            check = i;
            while(check != 0) {
                rem = check % 10;
                sum = sum + (rem * rem * rem);
                check = check / 10;
            }
            if(sum == i){
                System.out.println(i);
            }
        }
    }
}

출력 결과

필요한 패키지가 임포트되었습니다
Scanner 객체가 정의되었습니다
첫 번째 숫자를 입력하세요 :
1
상한값을 입력하세요 :
500
암스트롱 수는 다음과 같습니다 :
1
153
370
371
407

예제 2: 값이 미리 정의된 경우

아래 예제에서는 정수 값이 코드 안에 미리 정의되어 있으며, 해당 값을 콘솔에 바로 출력합니다. 사용자 입력 없이 로직만 빠르게 확인하고 싶을 때 유용합니다.

public class ArmstrongNumbers {
    public static void main(String args[]){
        int input_1, input_2, check, rem, sum, i;
        input_1 = 1;
        input_2 = 500;
        System.out.printf("첫 번째 숫자는 %d이고 상한값은 %d입니다", input_1, input_2);
        System.out.println("\n암스트롱 수는 다음과 같습니다 :");
        for (i = input_1; i<input_2; i++){
            sum = 0;
            check = i;
            while(check != 0) {
                rem = check % 10;
                sum = sum + (rem * rem * rem);
                check = check / 10;
            }
            if(sum == i){
                System.out.println(i);
            }
        }
    }
}

출력 결과

첫 번째 숫자는 1이고 상한값은 500입니다
암스트롱 수는 다음과 같습니다 :
1
153
370
371
407

정리

암스트롱 수 판별의 핵심은 % 연산자로 마지막 자릿수를 추출하고, / 연산자로 자릿수를 하나씩 제거하는 것입니다. 이 과정을 반복문 안에서 처리하면 두 정수 사이의 모든 암스트롱 수를 손쉽게 찾을 수 있습니다. 위 예제 코드를 변형하여 자릿수별 제곱 수(n제곱)를 적용하면 4자리 이상의 암스트롱 수도 확인할 수 있습니다.