ar = []
result = []
for i in range(10000): #배열 생성
ar.append(i+1)
result.append(i+1)
def selfNumber(n): #셀프 넘버
digit = len(str(n)) #n의 자릿수
num = n + n % 10 #마지막 수 더하기
for j in range(1, digit): #두 자릿수 이상일때
num += (n // (10 ** j)) % 10
if num in result: #배열에 있으면 지우고 재귀
result.remove(num)
selfNumber(num)
elif num > 10000: #종료조건
return None
for i in range(10000):
selfNumber(ar[i])
for i in result:
print(i)
셀프 넘버는 d(39)이면 d(39) = 39 + 3 + 9 = 51 처럼 적용되는 규칙이다.
나는 1부터 10000까지 반복문을 통하여 재귀를 했다.
d(1) = 1 + 1 = 2 -> d(2) = 2 + 2 = 4 ...
그런데 굳이 재귀로 하여 불필요한 반복이 생길 수 있겠다는 생각이 들었다.
블로그를 찾아보니, 문자열로 다루어 푸신 분도 보았다.
굳이 숫자 계산을 할 필요가 없어서 괜찮은 방법인 것 같다!
새로 알게 된 것들
1부터 10000까지 숫자로 리스트를 만드는 방법
SET = list(range(1,10001))
문자열로 숫자를 다루는 코드
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])
굳이 숫자로 주어졌다고 해서 숫자로 풀 필요는 없다. 기억하자!
'Algorithm' 카테고리의 다른 글
[11650, 11651] 파이썬 한 줄 입력받기 (0) | 2024.07.10 |
---|---|
[1193] 분수찾기 (0) | 2024.07.09 |
[1181] 문자열 리스트 정렬, 중복 제거 (0) | 2024.07.08 |
[1316] Python 문자열 찾는 함수 in (0) | 2024.07.04 |
파이썬 기본 문법 정복하기! / C언어랑 파이썬 비교 (2) | 2024.02.19 |