암스트롱 수란 무엇인가?
어떤 수의 각 자릿수를 세제곱한 값들의 합이 그 수 자신과 같을 때, 이를 암스트롱 수(Armstrong Number)라고 부릅니다. 대표적인 예로 153이 있습니다.
예시: 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153
같은 방식으로 370, 371, 407도 암스트롱 수에 해당합니다. 참고로 이러한 수는 '자기애적 수(Narcissistic Number)'라고도 불리며, 자릿수가 늘어나면 세제곱 대신 해당 자릿수만큼 거듭제곱한 값을 사용합니다.
100부터 1000 사이의 암스트롱 수 찾기
다음 파이썬 프로그램은 반복문과 나머지 연산자(%), 몫 연산자(//)를 활용해 100부터 999 사이의 모든 암스트롱 수를 찾아 출력합니다.
for num in range(100, 1000):
temp = num
total = 0
while temp > 0:
digit = temp % 10 # 마지막 자릿수 추출
total += digit ** 3 # 세제곱하여 누적
temp //= 10 # 마지막 자릿수 제거
if total == num:
print(num)코드 동작 원리
- 숫자 복사: 원본 값
num을 보존하기 위해temp변수에 복사합니다. - 자릿수 추출:
temp % 10으로 일의 자리 숫자를 얻습니다. - 세제곱 누적: 추출한 자릿수를 세제곱하여
total에 더합니다. - 자릿수 제거:
temp //= 10으로 처리한 자릿수를 버리고 다음 자릿수로 넘어갑니다. - 비교 및 출력: 루프가 끝난 후
total이 원래 수와 같으면 암스트롱 수이므로 출력합니다.
실행 결과
153 370 371 407
100에서 999 사이에는 위 네 개의 암스트롱 수만 존재합니다. 팁으로, 원본 코드에서는 조건 검사가 while 루프 안에 있었지만, 누적이 모두 끝난 뒤 한 번만 비교하도록 루프 밖으로 옮기면 로직이 더 명확하고 안전해집니다. 또한 파이썬 내장 함수 sum()과 이름이 겹치지 않도록 변수명을 total로 사용하는 것이 좋은 코딩 습관입니다.