Skip to content

[백준] 4673. 셀프 넘버

양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의할 때, n을 d(n)의 생성자라 하고 생성자가 없는 숫자를 셀프 넘버라 한다.

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하라.


접근을 잘못하면 조금 복잡해질 수 있는데, 아래와 같이 생성자가 있는 숫자의 목록을 먼저 만들고 해당하지 않는 수만 출력하면 쉽게 풀이할 수 있다.

def gn(n):
    return n + sum(int(x) for x in str(n))


s = {gn(i) for i in range(10001)}
for v in range(10001):
    if v not in s:
        print(v)

Reference