문제 링크
셀프넘버
풀이 전 계획 및 생각
어떤 숫자가 셀프넘버가 아닌 조건을 우선 생각해보았다. 그러면 그 숫자는 크게 두 숫자의 합으로 이루어지면 셀프 넘버가 아니게 되는게 c = a + b 일때 b가 a의 각 자리 숫자의 합이면 c는 셀프 넘버가 아니라고 할 수 있다. 그리고 b는 a보다 클 수 없다. 그러므로 b를 0부터 c/2까지 늘려가며 c를 a,b로 나눈후 a의 각자리 수의 합이 b와 같은지 확인한다. b가 a보다 클때까지 같은 적이 없으면 그 수는 셀프 넘버라고 할 수 있다.
풀이
def get_self_number(highest_number):
sel_number_set=[]
number = 1
while number < highest_number:
for part_of_number in range(number+1):
large_number = number - part_of_number
if sum_each_pos(large_number) == part_of_number:
break
if large_number < part_of_number:
sel_number_set.append(number)
break
number += 1
return sel_number_set
def sum_each_pos(number):
if number // 10 == 0:
return number % 10
return number % 10 + sum_each_pos(number // 10)
print(get_self_number(100))
풀이하면서 막혔던 점과 고민했던 점
각 자리 수의 합을 어떻게 쉽게 코딩할 수 있을까. 어떤 조건으로 셀프넘버를 발라낼까
풀이 후 알게 된 개념과 소감
재귀함수로 각 자리 수의 합을 구할 수 있음을 알게 되었다.