어떤 숫자 n이 주어졌을 때, 이 숫자가 자기애적 수(Narcissistic Number)인지 판별하는 문제를 살펴보겠습니다.
자기애적 수란 각 자릿수를 자릿수의 개수만큼 거듭제곱한 값의 합이 원래 숫자와 같아지는 수를 말합니다. 예를 들어 입력값이 9474라면 결과는 True입니다. 그 이유는 다음과 같습니다.
9⁴ + 4⁴ + 7⁴ + 4⁴ = 6561 + 256 + 2401 + 256 = 9474
해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- 숫자 n을 문자열로 변환하여 각 자릿수를 리스트로 만듭니다.
- 각 자릿수 x에 대해 x^(자릿수 개수)를 계산한 뒤 모두 더합니다.
- 그 합이 원래 숫자 n과 같으면 True, 아니면 False를 반환합니다.
구현 예제
class Solution:
def solve(self, n):
s = str(n)
return n == sum(int(x)**len(s) for x in s)
ob = Solution()
print(ob.solve(9474))
입력
9474
출력
True
코드 설명
위 코드의 핵심은 str(n)을 통해 숫자를 문자열로 변환하는 부분입니다. 문자열로 변환하면 각 자릿수에 손쉽게 접근할 수 있고, len(s)로 자릿수의 개수도 바로 구할 수 있습니다.
그다음 제너레이터 표현식 sum(int(x)**len(s) for x in s)를 사용하면 각 자릿수를 자릿수 개수만큼 거듭제곱한 값들의 합을 한 줄로 계산할 수 있습니다. 마지막으로 이 합이 원래 숫자와 같은지 비교하여 불리언 값을 반환합니다.
참고로 자기애적 수는 암스트롱 수(Armstrong Number)라고도 불리며, 153(1³+5³+3³=153), 370, 371, 407 같은 세 자리 수들도 대표적인 예시입니다.