1주차_과제_3_셀프넘버

하상철·2021년 4월 16일
0
  1. 문제 링크
    셀프넘버

  2. 풀이 전 계획 및 생각
    어떤 숫자가 셀프넘버가 아닌 조건을 우선 생각해보았다. 그러면 그 숫자는 크게 두 숫자의 합으로 이루어지면 셀프 넘버가 아니게 되는게 c = a + b 일때 b가 a의 각 자리 숫자의 합이면 c는 셀프 넘버가 아니라고 할 수 있다. 그리고 b는 a보다 클 수 없다. 그러므로 b를 0부터 c/2까지 늘려가며 c를 a,b로 나눈후 a의 각자리 수의 합이 b와 같은지 확인한다. b가 a보다 클때까지 같은 적이 없으면 그 수는 셀프 넘버라고 할 수 있다.

  3. 풀이

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))
  1. 풀이하면서 막혔던 점과 고민했던 점
    각 자리 수의 합을 어떻게 쉽게 코딩할 수 있을까. 어떤 조건으로 셀프넘버를 발라낼까

  2. 풀이 후 알게 된 개념과 소감
    재귀함수로 각 자리 수의 합을 구할 수 있음을 알게 되었다.

profile
프로그래밍 공부중

0개의 댓글