자릿수 더하기

문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

제한 조건

  • N의 범위 : 100,000,000 이하의 자연수

입출력 예

N answer
123 6
987 24

 

solution.py

def solution(n):
    digits =str(n)
    digit_sum = 0
    for digit in digits:
        digit_sum += int(digit)
    return(digit_sum)

 

프로그래머스에서 좋아요를 가장 많이 받은 코드는 다음과 같습니다!

def solution(n):
    '''number의 각 자릿수를 더해서 return하세요'''
    if n < 10:
        return n

    return n%10 + solution(n//10)



# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(solution(123)));

이게 대체 뭐지?라고 생각하실 수 있는데 예시를 통해 설명드리겠습니다!

아시는 분들은 넘어가시면 됩니다! (재귀 함수의 기본적인 예시입니다)

ex) n이 123인 경우 어떻게 되는지 설명해 드리겠습니다!

 

처음부터 설명하자면 위 함수 'solution'은 하나의 정수 'n'을 매개변수로 받아

그 숫자의 각 자릿수를 모두 더하는 함수입니다.

 

if n < 10 부분은 재귀함수의 기저 조건입니다.

당연히 n이 10보다 작은 경우는 한자리 숫자이므로 더 이상 나눌 수 없으므로,

n을 그대로 반환하겠죠?

 

return n % 10 + solution(n // 10) 부분에서 함수는 자기 자신을 재귀적으로 호출합니다.

여기서 n % 10은 n의 가장 오른쪽 자릿수 (1의 자릿수)를 구하고

n // 10은 n을 10으로 나눈 몫을 구합니다.

그리고 n의 가장 오른쪽 자릿수를 제거하는 효과가 있습니다.

 

결국 이 과정을 반복하면, 모든 자릿수가 더해집니다!

n = 123

solution(123)은 ' 3 + solution(12) '를 반환

solution(12)는 ' 2 + solution(1) ' 을 반환

solution(1)은 ' 1 '을 반환 (기저 조건에 도달함. 10 미만이니까요)

 

따라서 최종결과' 3 + 2 + 1 = 6 ' 입니다!

 

 

Lv.1 문제도 이런 방식으로 접근하면 쉽지 않은 것 같습니다! 

물론 배울 점도 있구요 ㅎㅎ

얼른 실력 키워서 Lv.2 이상 문제도 슉슉 풀어졌으면 좋겠네요!