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까지의 수를 가진 집합에서 위의 집합을 빼면 셀프 넘버들로만 이루어진 집합이 만들어집니다.
그러면 해당 집합을 리스트로 만들어서 정렬한 것을 출력하면 되는 문제입니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 11654번-파이썬/Python] 아스키코드 (0) | 2020.10.12 |
---|---|
[백준 1065번-파이썬/Python] 한수 (0) | 2020.10.10 |
[백준 15596번-파이썬/Python] 정수 N개의 합 (0) | 2020.10.06 |
[백준 4344번-파이썬/Python] 평균은 넘겠지 (0) | 2020.10.06 |
[백준 8958번-파이썬/Python] OX 퀴즈 (0) | 2020.10.05 |