[Python]_자릿수 합 구하기

hanseungjune·2022년 6월 14일
0

Python

목록 보기
34/38

풀이

# 자리수 합 리턴
    

def sum_digit(num):
    # 코드를 입력하세요.
    sum_num = 0
    num_1000 = num//1000
    num_100 = num//100 - num_1000
    num_10 = num//10 - num_100*10
    num_1 = num//1 - num_10*10 - num_100*100
    
    if num >= 1000:
        sum_num += num_1000
    elif num >= 100:
        sum_num += num_1 + num_10 + num_100
    elif num >= 10:
        sum_num += num_1 + num_10
    else:
        sum_num =+ num_1
    
    return sum_num
    

# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
# 코드를 입력하세요.
sum = 0
for i in range(1001):
    sum += sum_digit(i)
    
print(sum)

나는 리턴값으로 남겨줄 sum_num을 일단 따로 0으로 만들어두고, 자릿수마다 합을 시키려고했다. 그리고 자릿수마다 숫자를 가져오기 위해서 위의 식을 사용했고, 반복문을 통해서, 1~1000까지의 합을 출력할 수 있었다. 하지만...

내 코드가 복잡해보인다. 그래서 모범답안을 보았더니...

# 자리수 합 리턴
def sum_digit(num):
    total = 0
    str_num = str(num)
    
    for digit in str_num:
        total += int(digit)

    return total


# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
digit_total = 0
for i in range(1, 1001):
    digit_total += sum_digit(i)

print(digit_total)

깔끔한건 둘째치고, 이렇게 깔끔하게 나올 줄은 몰랐다. 그래서 지금 좀 반성 중이다.

나같은 경우에는 숫자를 어떻게든 나누고 빼면서 자릿수의 숫자를 꺼내는게 목적이었는데, 모범답안의 경우에는 숫자를 문자열로 만들어놓고, 배열의 성질을 이용하여 인덱스마다 하나씩 빼와서 정수로 형변환을 해주고, 이를 total이라는 변수에 다가 누적해서 더해주었다. 그 다음은 나와 과정이 같았다.

자릿수를 구해야한다면 다음에 나도 문자열배열의 성질을 가지고 있다는 것을 생각하고 문제를 풀어야겠다.

profile
필요하다면 공부하는 개발자, 한승준

0개의 댓글