이 글에서는 주어진 정수가 암스트롱 수인지 판별하는 파이썬 프로그램의 풀이 과정과 접근 방식을 단계별로 살펴봅니다.
문제 정의
정수 n이 주어졌을 때, 이 정수가 암스트롱 수인지 확인해야 합니다.
양의 정수가 n자리(n차) 암스트롱 수가 되려면, 각 자릿수를 n제곱한 값들을 모두 더한 합이 원래 수와 같아야 합니다.
abcd... = a^n + b^n + c^n + d^n + …
예를 들어 153은 대표적인 세 자리 암스트롱 수입니다. 1³ + 5³ + 3³ = 1 + 125 + 27 = 153이 성립하기 때문입니다.
접근 방식
여기서는 세 자리 수(3차)를 대상으로 하는 브루트 포스 방식의 풀이를 다룹니다. 임의의 n차 암스트롱 수를 확인하려면 코드 7번째 줄의 지수 3을 해당 차수 값으로 바꿔주면 됩니다.
전체적인 알고리즘은 다음과 같습니다.
- 원래 숫자를
temp변수에 복사합니다. while루프 안에서 나머지 연산(% 10)으로 마지막 자릿수를 하나씩 추출합니다.- 추출한 자릿수를 세제곱하여 누적합 변수
sum_에 더합니다. - 정수 나눗셈(
//= 10)으로 마지막 자릿수를 제거하고 루프를 반복합니다. - 루프가 끝난 후 원래 수
num과sum_을 비교하여 두 값이 같으면 암스트롱 수로 판별합니다.
구현 예시
num = 221 sum_ = 0 # temp = num while temp > 0: digit = temp % 10 sum_ += digit ** 3 temp //= 10 # if num == sum_: print(num,"은(는) 암스트롱 수입니다") else: print(num,"은(는) 암스트롱 수가 아닙니다")
실행 결과
221 은(는) 암스트롱 수가 아닙니다
221의 경우 각 자릿수의 세제곱 합이 2³ + 2³ + 1³ = 8 + 8 + 1 = 17이므로 원래 수인 221과 일치하지 않습니다. 따라서 암스트롱 수가 아니라는 결과가 출력됩니다.
참고로 위 코드의 모든 변수(num, sum_, temp, digit)는 전역 범위(global scope)에서 선언되어 프로그램 전체에서 접근할 수 있습니다.
결론
이 글에서는 자릿수 추출과 거듭제곱 합 계산을 통해 주어진 정수가 암스트롱 수인지 판별하는 방법을 알아보았습니다. 지수 값만 변경하면 세 자리뿐만 아니라 임의의 자릿수에 대한 암스트롱 수도 손쉽게 확인할 수 있습니다.