풀이
전체 1~10,000까지의 수에서
생성자를 구하는 식 을 사용해 생성자 리스트에 추가한 뒤(append)
for n in str(num): ### ex) 280
num += int(n) ### num = 280 + int('280[0]') + int('280[1]') + int('280[2]') = 280 + 2 + 8 + 0
전체 수에서 생성자 리스트를 빼는 형식으로 셀프 넘버를 구한다.
내 제출
numbers = set(range(1,10_001)) ### 1~10000까지
ganarated_num_list=[] ### 생성자 리스트
for num in numbers:
for n in str(num): ### ex) 63
num += int(n) ### num = num + int(n[0]) + int(n[1]) ex) 63+6+3
if num <= 10_000: ### num이 numbers 한계인 10000보다 크면 안되니까
ganarated_num_list.append(num) ### 생성자 리스트에 추가
for genarated_num in set(ganarated_num_list): ### set으로 중복 걸러내기
numbers.remove(genarated_num) ### 생성자 빼버리기
for self_num in numbers:
print(self_num)
p.s. 구글링을 통해 찾아본 풀이중에 set에서 사용할 수 있는 add, '-' 연산자를 이용한 차집합, sorted 함수를 활용한 풀이가 깔끔했기에 첨부한다.
numbers = set(range(1, 10000))
remove_set = set() # 생성자가 있는(지워버릴) 숫자 set
for num in numbers :
for n in str(num):
num += int(n)
remove_set.add(num) # add: 집합에 요소를 추가할 때
self_numbers = numbers - remove_set # set의 '-' 연산자로 차집합을 구함
for self_num in sorted(self_numbers): # sorted 함수로 정렬
print(self_num)
핵심인 풀이 부분은 제대로 풀어냈지만 아직도 for문, append, remove등 함수활용에 어려움을 느끼는중이다. 복습 필수!