[Python] 코딩 도장 - 곱하기의 전체 합 구하기

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 곱하기의 전체 합 구하기] - Lv.1

10~1000까지 각 숫자 분해하여 곱하기의 전체 합 구하라.

예로, 10~15까지의 각 숫자 분해하여 곱하기의 전체 합은 다음과 같다.

10 = 1 * 0 = 0

11 = 1 * 1 = 1

12 = 1 * 2 = 2

13 = 1 * 3 = 3

14 = 1 * 4 = 4

15 = 1 * 5 = 5

그러므로, 이 경우의 답은 0+1+2+3+4+5 = 15

출처: https://codingdojang.com/scode/505?answer_mode=hide


[풀이]

cnt = 0
num_lst = range(10,1001)
for num in num_lst:
    prod = 1

    for i in str(num):
        prod *= int(i)
    
    cnt += prod
    
print(cnt)
93150

for문으로 풀어보았는데 특별히 새로운 코드를 활용하기 보단 직관적으로 푼 것 같다.


[추천 풀이]

print(eval('+'.join('*'.join(str(x)) for x in range(10, 1001))))
93150

다른 분이 푸신 풀이 중 추천수가 많은 풀이이다.

코드를 이해하기 쉽게 살짝 수정해서 과정별로 살펴보자.

list(("*".join(str(x)) for x in range(10, 15)))
['1*0', '1*1', '1*2', '1*3', '1*4']

처음 join()str()을 활용한 부분인데 문자열에 join()을 적용하면 각 문자별로 적용이 된다.

문자열에 join()을 적용해본적이 없어서 처음 알았는데 유용한 것 같다.

'+'.join( "*".join(str(x)) for x in range(10, 15) )
'1*0+1*1+1*2+1*3+1*4'

앞서 생성한 부분을 다시 join()으로 더하기 기호를 추가하였다.

eval( '+'.join( "*".join(str(x)) for x in range(10, 15) ) )
10

eval()은 문자열로 된 산수의 연산 값을 반환해준다고 한다.

앞서 완성된 수식이 문자열이므로 eval()을 적용하여 연산을 진행한 것이다.

개인적으론 평소에 join()이나 eval()을 떠올리지 못한 것 같아 이번 기회에 잘 참고해두어야 겠다.

Leave a comment