암스트롱 수(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자리 이상의 암스트롱 수도 확인할 수 있습니다.