프로그래머스 자릿수 구하기

Kim Dong Kyun·2022년 11월 14일

진짜 너무 멋있었다.

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

아니 진짜 이선생님은 신인가...? 자릿수 구하기에서 내가 생각한 컨셉은 두개다.

  1. map(int, str(n)) 의 sum을 구하는 방법(이걸로 맞춤)
  2. 재귀함수를 이용하면 될 것도 같은데...도저히 시도를 못했다.
    2번은 예전에 이와 반대되는 문제 풀이 방법을 봤었다. 마찬가지로 재귀함수에서 *10씩 반복해서 풀어나가는 문제였다. (스파르타 알고리즘에서 봤음)
    아 진짜 못찾겠다 ㅜ 눈물나... 나중에라도 찾으면 무조건 첨부한다.

<여기서부터는 선생님의 답이다>

def sum_digit(number):
    if number < 10:
        return number;
    return (number % 10) + sum_digit(number // 10) 

print("결과 : {}".format(sum_digit(123)));

'num % 10'는 첫번째 자리를 구해주고, '함수(num // 10)'는 계속 나눠주면서 분열하여 두번째, 세번째... 자리 숫자를 계속 + 할 수 있게 해줌

ex) 숫자가 123일 경우~
123 % 10 = 3, (함수(123 // 10) = 12 ≒ 2 + 함수(12 // 10)
Base case에 10 미만인 자연수일때는 그대로 리턴하고 Recursive method에는 각각의 자릿수를 10으로 나눈 나머지를 이용해 더하는 방식

설명하신 선생님도 너무 훌륭하다. 군더더기 없는 해답인듯.

def sum_digit(number):
    return sum([int(i) for i in str(number)])

이것도 멋진듯.

0개의 댓글