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

파이썬으로 주어진 숫자가 자기애적 수(Narcissistic Number)인지 확인하는 방법

어떤 숫자 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 같은 세 자리 수들도 대표적인 예시입니다.