[백준 4673번-파이썬/Python] 셀프 넘버
알고리즘 공부/BOJ백준 풀이

[백준 4673번-파이썬/Python] 셀프 넘버

http://acmicpc.net/problem/4673

 

{코드}

numbers = {i for i in range(1, 10001)}
generated = set()
for i in range(1, 10001):
	i += sum(map(int, str(i)))
	if i > 10000:
		continue
	generated.add(i)
[print(i) for i in sorted(list(numbers-generated))]

{설명}

이 문제는 집합을 이용해서 풀 수 있습니다.

먼저 1부터 10000까지 반복하며 각 숫자의 d(n)들로 이루어진 집합을 만들면 해당 집합에는 셀프 넘버가 없습니다.

그러므로 1부터 10000까지의 수를 가진 집합에서 위의 집합을 빼면 셀프 넘버들로만 이루어진 집합이 만들어집니다.

그러면 해당 집합을 리스트로 만들어서 정렬한 것을 출력하면 되는 문제입니다.