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

파이썬으로 한 자리 수가 될 때까지 자릿수의 합 구하기

문제 이해하기

양의 정수 n이 주어졌을 때, 모든 자릿수를 더해 새로운 숫자를 만들고, 그 결과가 10보다 작아질 때까지 이 과정을 반복하는 문제입니다.

예를 들어 입력이 9625라면 다음과 같이 진행됩니다.

  • 9 + 6 + 2 + 5 = 22
  • 2 + 2 = 4

결과가 한 자리 수인 4가 되었으므로 최종 출력은 4입니다. 참고로 이렇게 얻어지는 값은 수학에서 '디지털 루트(Digital Root)'라고 불리는 개념과 같습니다.

해결 접근 방법

이 문제는 재귀(Recursion)를 활용하면 간단하게 해결할 수 있습니다.

  1. solve() 메서드를 정의하고, 매개변수로 n을 받습니다.
  2. n이 10보다 작으면 이미 한 자리 수이므로 n을 그대로 반환합니다.
  3. 합계를 저장할 변수 s := 0으로 초기화합니다.
  4. l := log(n)의 밑을 10으로 하는 로그값에 1을 더한 후 내림한 값(즉, n의 자릿수)으로 설정합니다.
  5. l이 0보다 큰 동안 반복합니다.
    • s := s + (n mod 10)
    • n := n / 10의 몫
    • l := l - 1
  6. 반복이 끝나면 solve(s)를 재귀 호출하여 결과를 반환합니다.

구현 예제

import math

class Solution:
    def solve(self, n):
        if n < 10:
            return n
        s = 0
        l = math.floor(math.log(n, 10) + 1)
        while l > 0:
            s += n % 10
            n //= 10
            l -= 1
        return self.solve(s)

ob = Solution()
print(ob.solve(9625))

입력

9625

출력

4

코드 설명

n % 10은 숫자의 가장 뒷자리(일의 자리)를 추출하고, n //= 10은 마지막 자릿수를 제거하는 연산입니다. 이 두 연산을 자릿수만큼 반복하면 전체 자릿수의 합을 구할 수 있습니다.

자릿수의 합 s를 구한 뒤에는 자기 자신인 solve(s)를 다시 호출하여, 합이 10 미만의 한 자리 수가 될 때까지 과정을 반복합니다. 이러한 재귀 구조 덕분에 코드가 간결하면서도 직관적으로 동작합니다.