문제 설명
자연수 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 이상 문제도 슉슉 풀어졌으면 좋겠네요!

'코딩테스트 > 프로그래머스 문제' 카테고리의 다른 글
두 정수 사이의 합 (0) | 2023.12.04 |
---|---|
정수 내림차순으로 배치하기 (0) | 2023.12.03 |
x만큼 간격이 있는 n개의 숫자 (0) | 2023.12.01 |
자연수 뒤집어 배열로 만들기 (0) | 2023.11.29 |
평균 구하기 (0) | 2023.11.28 |