[Recursive Function] 자릿수 합

HOONSSAC·2024년 1월 9일
1

Codeit Algorithm

목록 보기
7/15
post-thumbnail

코드잇 강의를 통해 알고리즘에 대해 공부하며 배운 내용들을 기록한 글입니다.


문제 설명

파라미터로 정수값 n을 받고 n의 각 자릿수의 합을 리턴해 주는 재귀 함수 sum_digits를 작성해라!
단, 반복문 사용은 안 된다!

# n의 각 자릿수의 합을 리턴
def sum_digits(n):
    # 여기에 코드를 작성하세요

# 테스트 코드
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
14
15
16
11
20

나의 풀이

# n의 각 자릿수의 합을 리턴
def sum_digits(n):
    if n < 10:
        return n
    else:
        return sum_digits(n//10) + n%10

# 테스트 코드
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))

나는 우선 10이하의 숫자의 출력값은 무조건 그 숫자 자체이므로,
if문을 이용하여 해당 경우에는 n을 그대로 반환하도록 하였다.

def sum_digits(n):
    if n < 10:
        return n

그리고 이제 n이 10이상일 경우를 고려해야 하는데, 재귀함수 만으로 n의 자릿수를 파악하는 방법이 잘 떠오르지가 않았다.
대신에, 자릿수를 하나씩 줄여가는 방법을 생각해냈다.

n은 10보다 작지 않는 이상, 항상 10으르 나눌 수 있기 때문에 "n%10"을 통해서 1의 자리를 구하고, 그보다 윗자리의 수는 10으로 나눈 값을 파라미터로 sum_digits함수를 다시 호출하면 된다.

    else:
        return sum_digits(n//10) + n%10

예를 들어, 22541같은 경우 sum_digit(2254) + 1을 리턴하게 되는 것이고,
sum_digit(2254)는 다시 함수를 호출해, sum_digit(225) + 4를 리턴하며 n이 한 자리 수가 될 때까지 반복 될 것이다.

profile
훈싹의 개발여행

0개의 댓글