https://www.acmicpc.net/problem/4673
1) 입력값: 없음 (1 - 10,000 range)
2) 출력값: range 내의 모든 셀프 넘버
3) 제약조건: 1 <= N <= 10,000
4) 예외케이스: 없음
def get_self_number(a, b):
if b < a:
print("b must be greater than a")
return
not_self_num = set()
for i in range(a, b):
not_self_num.add(d(i))
range_num = set(range(a, b))
self_num = range_num - not_self_num
for i in sorted(self_num):
print(i)
def d(n):
a = 0
b = list(str(n))
for i in b:
a += int(i)
return a + n
get_self_number(1, 10000) # 1 3 5 7 9 20 31 42 ...
처음엔 셀프넘버를 모두 찾자는 생각에 빠져 있어서 더 쉬운 셀프넘버가 아닌 수를 활용하는 방법을 간과했다.
이 문제에서는 set의 유용성을 배울 수 있었다.