백준 4673 파이썬 셀프 넘버

 

 

처음에는 셀프 넘버에 어떤 규칙이 있을까 싶어서 그걸 구하려고 했는데,

그게 아니라 1~10,000까지의 수 중에서 생성자를 뺀 나머지들을 묶으면 쉬웠다

 

[1~10000까지의 수] - [1~10000까지 생성자가 있는 수들] = [(1~10000까지의)셀프 넘버들] 이 되는 것!

 

 

 

밑줄 친 부분을 만들기 위해 우선 d(n) 함수를 정의해야 한다.

def d(n):
    return ( n + sum(map(int, str(n))))

sum 과 map 을 이용해 n + n의 각 자리수 리턴

(n + n//10000 + n//1000 ... 이런 식으로 해서 실패했었다 ㅋㅋㅋ)

 

 

 

a = [] 라는 빈 리스트를 만들어 결과값을 하나씩 추가

a = []

for i in range(1, 10000):
        a.append(d(i))

 

 

 

1~10000까지의 수 중

a에 있는 수를 제거하고

남은 수들의 리스트를 출력

self_n = list(range(1, 10000))

for i in range(len(a)):
    if a[i] in self_n:
        self_n.remove(a[i])

for i in self_n:
    print(i)
    

 

 

 

 

 

정리하면 이런 모습이 된다!

def d(n):
    return ( n + sum(map(int, str(n))))

a = []
self_n = list(range(1, 10000))

for i in range(1, 10000):
        a.append(d(i))

for i in range(len(a)):
    if a[i] in self_n:
        self_n.remove(a[i])

for i in self_n:
    print(i)