
📍In a nutshell...
set()은 합집합/차집합/교집합을 계산할 때 매우 유용하다! 정수 n개가 주어졌을 때, 모든 합을 구하면 된다.
함수명은 def solve(a: list) 로 정의되어 있어서 그대로 사용했다. 
def solve(a):
	return sum(a)	#sum: list안에 있는 값을 모두 더해줌 #4673번
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 문제다.
셀프 넘버란 생성자가 없는 숫자를 말한다. 생성자 n은 n과 각 자릿수를 모두 더하여 새로운 넘버를 생성한다. (33+3+3 = 39. 33은 39의 생성자)
결국 생성자 n을 통해 계산되는 숫자를 제거하면 셀프 넘버가 남는다.
(각 숫자 집단을 set형태로 통일하고, 차집합 사용)
def con_num(n):
    if n<100:
        return n+(n//10)+(n%10)
    elif n<1000:
        return n+(n//100)+((n%100)//10)+((n%100%10))
    elif n<10000:
        return n+(n//1000)+((n%1000)//100)+((n%1000%100)//10)+((n%1000%100)%10)
        
        
 total_num = set(list(range(1,10001)))	#차집합 계산하기 위해 set 적용
 self_num = set([con_num(x) for x in range(1,10001)])	#생성자가 2개인 경우도 있는데 set을 통해 중복 제거됨 
 
 result = sorted(total_num - self_num)	#sorted: 정렬된 결과를 돌려줌
 
 for answer in result:
 	print(answer)#1065
한수의 개수를 출력하는 문제로, 한수는 숫자의 각 자릿수끼리 등차수열을 이루는 수를 말한다. 입력값 N을 넣으면 2가지 경우의 수가 생기는데, 
N[0]-N[1] == N[1]-N[2] 이면 한수이며(이 때 N은 문자열로 바꾸었다고 가정), 이를 count 해서 99부터 더하면 된다. N = int(input())
def solve(a):
	if a <100: return a 	#1~a까지 모두 한수, a 그대로 출력하면 됨
    else: 
    	cnt = 0 
    	for i in range(100,a+1):
        	b = str(i)		#문자로 바꾸어 각각의 숫자로 쪼갬
            if int(b[0])-int(b[1]) == int(b[1])-int(b[2]):
            	cnt += 1
        return 99 + i 		#99 + count된 개수 
print(solve(N))
출처: 백준