Problem :

https://www.hackerrank.com/challenges/recursive-digit-sum/problem


My Solution :

#!/usr/bin/env python3

memo = {i:i for i in range(10)}

def super_digit(n):
    if n in memo:
        return memo[n]
    tmp_n = sum(map(int, str(n)))
    if tmp_n in memo:
        return memo[tmp_n]
    memo[tmp_n] = super_digit(tmp_n)
    return memo[tmp_n]

def digitSum(n, k):
    tmp_n = super_digit(n)
    return super_digit(tmp_n*k)


n, k = map(int, input().strip().split())
result = digitSum(n, k)
print(result)


My Solution 2 :

생각해보니 무조건 작아지고 분기하지 않기 때문에 memoization이 사용될 일이 없다. 그래서 다시 아래와 같이 풀어봄.

#!/usr/bin/env python3
 
def super_digit(n):
    if n < 10:
        return n
    tmp_n = sum(map(int, str(n)))
    return super_digit(tmp_n)

def digitSum(n, k):
    return super_digit(n*k)


n, k = map(int, input().strip().split())
result = digitSum(n, k)
print(result)


Super Simple Solution :

n, k = map(int, input().strip().split())
print(n*k%9 or 9)