Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

배우고 느낀 것들

자릿수의 합 구하기 (Nonetype 에러 해결) 본문

파이썬/문제

자릿수의 합 구하기 (Nonetype 에러 해결)

낑깡H 2023. 3. 22. 16:08

🍒 문제 링크 

 

🍒 문제 분석

1. sum_digit 함수를 이용해 각 자리의 합을 구하기

2. sum_digit(1) ~ sum_digit(1000) 의 합계 구하기 

 

🍒 내 코드

def sum_digit(num):
    length = len(str(num))
    answer = 0 
    
    for i in range(1, length+1):
        answer +=  num % (10 ** i) // (10 ** (i-1)) 
        num -= num % (10 ** i)
    
    return answer
    
# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
real_answer = 0
for k in range(1, 1001):
    real_answer += sum_digit(k)

print(real_answer)

 

🍓 내 해결 과정

 

 

🌽 다른 사람 코드

def sum_digit(num):
    total = 0
    str_num = str(num)
    
    for digit in str_num:
        total += int(digit)

    return total

 

굳이 일일히 나눠서 몫을 구하고, 또 기존 숫자에서 빼서 새롭게 나누는 대신, 그냥 문자열로 바꿔 각 값을 불러와 정수형으로 변환, 더하면 쉬움,,, 

 

def solution(N):
    answer = 0

    while(N>0):
        answer+=(N%10)
        N=N//10

    return answer

매번 값을 빼주는 대신, N = N // 10 으로 하면 훨씬 깔끔한 식.

숫자의 총길이도 length로 설정하고 for 문을 작성하는 것보다 while 문 작성하게 되면 더 깔끔한듯! 

 

def sum_digits(n):
    if n < 10:
        return n
    
    # recursive case
    return sum_digits(n // 10) + (n % 10)

재귀함수를 이용한 더 깔끔한 식! 

 

🍉 깨달은 점 및 정리

 

* 함수의 마지막 결과를 print() 로 설정하니, 이후 해당 함수값을 구하는 과정에서 nonetype형식과 관련한 에러 발생. 

int 값이 그대로 반영되는 것이 아니라 출력되는 과정에서 형식이 None 으로 바껴 더하기가 불가능해졌다,, 

 

-> 함수의 값 출력을 return 으로 변경하니, int값 그대로 출력되어 추가적인 연산이 가능해짐 ! 

 

 

 

참고 

 

https://jsitclub.tistory.com/59

 

파이썬 - 프로그래머스 - 자릿수 더하기

프로그래머스 level 1 문제 설명 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 N의 범위

jsitclub.tistory.com

https://nulls.co.kr/codeit/355

'파이썬 > 문제' 카테고리의 다른 글

주민번호 뒷자리 가리기  (0) 2023.03.22
피타고라스 삼조 찾기  (0) 2023.03.14
[코드트리] 숫자의 계절은  (1) 2022.10.08
[코드트리] 좌우로 움직이는 로봇  (0) 2022.10.03
[코드트리] datetime to datetime  (1) 2022.09.26
Comments