업데이트:

태그: , , ,

카테고리:

내 코드

import sys

def d(n):
    num_list = list(map(int,str(n)))
    next_num= n + sum(num_list)
    return next_num

lst = []
for num in range(1,10000):
    lst.append(d(num))

full_list = list(range(1,10000))
for i in full_list:
    if i not in lst:
        print(i)

문제 정의

주어진 수 n 과 주어진 수의 각 자리수를 더하는 함수가 있을때,
n이라는 수가 주어지면 무한 수열을 만들 수 있다.
가령 20이라는 수가 주어지면 다음 숫자는

20 + 2 + 0 = 22
22 + 2 + 2 = 26
26 + 2 + 6 = 34 
...

이렇게 수열을 만들 수 있다.
함수를 d(n)이라 할때 n을 d(n)의 생성자라고 한다.
생성자는 한 개보다 많은 경우가 있다.
생성자가 없는 숫자를 셀프넘버라고 하는데, 우리는 셀프넘버를 찾아야한다.

함수 정의

d(n)함수를 정의해야한다.

def d(n):
  입력받는 숫자 n을 연산을 위해 리스트형식으로 정수형으로 저장한다.
  num_list = list(map(int,str(n)))

  생성하는 다음 숫자를 반환한다.
  next_num = n + sum(num_list)
  return next_num


셀프넘버가 아닌 숫자 찾기

lst = []
for i in range(1,10001)
  lst.append(d(i))

셀프넘버는 생성자로 만들지 못하는 숫자이다.
따라서 1부터 10000까지 생성자로 만들 수 있는 숫자(셀프넘버가 아닌 숫자)를 lst에 저장한다.

셀프넘버 찾기

full_lst = list(range(1,10001))
for i in full_lst:
  if i not in lst:
    print(i)

1부터 10000까지 리스트에서 셀프넘버가 아닌 숫자는 셀프넘버이다.

댓글남기기