매일 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])