# 자리수 합 리턴
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
이라는 변수에 다가 누적해서 더해주었다. 그 다음은 나와 과정이 같았다.
자릿수를 구해야한다면 다음에 나도 문자열
이 배열
의 성질을 가지고 있다는 것을 생각하고 문제를 풀어야겠다.