def rm(n):
sum=n
while(n!=0):
sum+=n%10
n//=10
return sum
a=[]
for i in range(1,10001):
a.append(i)
b=[]
for i in range(1,9973):
b.append(rm(i))
aset=set(a)
bset=set(b)
cset=aset-bset
c=sorted(list(cset))
for i in range(len(c)):
print(c[i])
이번 문제는 쓰이는 문법이 어렵다거나 자잘하게 에러가 뜨는게 아니라 문제 요구사항 자체가 헷갈렸다. 10000보다 작거나 같은 셀프 넘버를 하나씩 증가하는 순서로 출력하는 문제였는데, 정수 n이 있을때 정수n에 각 자릿수의 합을 더해서 다른 정수 n2를 만들 수 있다면, 이때 정수 n을 생성자라 하고 이 생성자가 없는 숫자를 셀프 넘버라고 한다.
함수 카테고리에 있는 문제여서 함수 안에서 어떻게든 처리를 해야한다고 생각한 나머지, 재귀함수로 만들 생각을 했지만, 그보다 더 간단한 방법을 생각해내서 단순하게 풀어냈다. 10000까지의 숫자 중 생성자가 있는 숫자들을 빼주는 방법이다. 공통부분을 없애주는 기능이 있는 집합 문법을 처음 써볼 수 있는 문제였다.