a,b,c = map(int, input().split())
mul = str(a*b*c)
def sum_all(arr, n):
if (n == 0):
return int(arr[0])
return sum_all(arr,n-1) + int(arr[n])
print(sum_all(mul,len(mul)-1))
나는 이렇게 숫자를 문자로 바꾸고, 출력할 땐 다시 숫자로 형변환을 해서 짰다. 지금까지 이런 방식으로 했었는데, 해답을 보니 재귀함수의 정의를 수학적으로 풀어놨더라.
예를들어, 271이라는 숫자는
-> 27 + 1
-> 2 + 7 + 1
이렇게 계산할 수 있다.
여기 27 + 1에서 27과 1은 271을 10으로 나눈 몫과 10으로 나눈 나머지이다.
그럼 해당 조건으로 코드를 다시 짜면 다음과 같다.
a,b,c = map(int, input().split())
mul = a*b*c
def sum_all(n):
if (n < 10):
return n
return sum_all(n//10) + n%10
print(sum_all(mul))
함수의 파라미터가 줄어들어서 그런지 확실히 더 간결하고 이해하기 쉬워졌다.
앞으로 약간 공식처럼 숫자의 모든 자릿수를 더하라! 라는 문제가 주어지면 바로 f(n//10) + n%10을 공식처럼 떠올려야겠다.
'개발 > 알고리즘' 카테고리의 다른 글
[코드트리 챌린지] 3주차 실력진단 (0) | 2023.09.22 |
---|---|
[코드트리] 밭에 자라는 나물 (0) | 2023.09.22 |
[코드트리] 출력결과 18 - 손코딩 (0) | 2023.09.12 |
[코드트리] 패턴 출력하는 재귀함수 (0) | 2023.09.12 |
[코드트리 챌린지] 1주차 및 첫번째 실력진단 (0) | 2023.09.11 |