Home Add Digits
Post
Cancel

Add Digits

Leetcode Problem

Add Digits

각 자릿 수를 더했을 때 한자릿 수가 될 경우까지 각 자릿 수를 더하여 그 숫자를 구하는 문제입니다.

1
2
3
4
class Solution:
    def addDigits(self, num: int) -> int:
        num = sum(int(x) for x in str(num))
        return num if num < 10 else self.addDigits(num)

각 자릿수를 더하기 위해 수를 string으로 만들고 수 전체를 더합니다.
num이 한자릿 수가 될 때까지 재귀를 반복합니다.

1
2
3
class Solution:
    def addDigits(self, num: int) -> int:
        return num if num < 10 else self.addDigits(num // 10 + num % 10)

주어진 수에서 자릿수를 전부 더한 후 재귀를 하는 방식에서 좀 더 개선시켰습니다.
주어진 수가 세 자리든 네 자리든 10으로 나눈 후 바로 나머지를 더해도 결과값이 바뀌지 않기 때문에 num이 한자릿 수가 될 때까지 10을 나누고 나머지를 바로 더하는 연산을 반복합니다.
이 방식은 또한 문자열로 변환할 필요가 없습니다.

1
2
3
class Solution:
    def addDigits(self, num: int) -> int:
	    return 0 if num == 0 else 9 if num % 9 == 0 else num % 9

solution의 풀이입니다.
1부터 100까지 add digits의 결과값을 나열하다보면 9번째를 기준으로 규칙성이 나타납니다.
이를 활용하면 반복문이나 재귀 없이 답을 구할 수 있습니다.





참고

This post is licensed under CC BY 4.0 by the author.