매일 BOJ
(매일 BOJ) Python 4673번 셀프 넘버
norepinephrine
2025. 3. 21. 19:17
📜 문제 요약
어떤 수 n에 대해 d(n) = n + 각 자리 숫자의 합으로 정의할 때,
어떤 수가 d(n)의 결과로 나올 수 있다면, 그 수는 생성자가 있는 수라고 해.
- 예:
- d(75) = 75 + 7 + 5 = 87 → 87은 생성자가 75
- 1~10000 중에서 생성자가 없는 숫자 (셀프 넘버) 만 출력하면 됨
💡 아이디어
- 1부터 10000까지 순회하면서,
- d(n) 값을 전부 구해서 생성된 수들을 기록
- 그리고 1부터 10000까지 중에서 한 번도 생성되지 않은 수만 출력
핵심:
- d(n) 자리수 분해해서 합
- 10000 이하에서 생성된 수를 체크
- 생성 안 된 숫자만 출력
def d(n):
num = list(str(n))
asw = n
for i in range(len(num)):
asw += int(num[i])
return asw
SET = list(range(1,10001))
for n in range(1,10001):
if d(n) in SET:
SET.remove(d(n))
for i in range(len(SET)):
print(SET[i])