Data Science/알고리즘 공부
[백준][파이썬] 4763번 셀프넘버
titaniumm
2020. 3. 13. 22:54
for k in range(1,10000):
count = 0
for i in range(1,k):
sum =0
litt = list(str(i))
for j in litt:
sum = int(j)+sum
sum = sum + i
if sum == k:
count +=1
if count == 0:
print(k)
위의 코드와 같이 이중포문을 작성하여 모든 수를 계산하는 방식을 했다.
하지만 시간초과가 발생했다. 이후에 재귀함수로 했지만 10000번이 넘게 돌아서 그런지 오버플로우가 발생했다
이를 해결하기 위해선 set수를 활용한 생각의 전환이 필요했다.
num = set(range(1,10001))
generated_num = set()
for i in range(1,10001):
for j in str(i):
i += int(j)
generated_num.add(i)
self_num = num - generated_num
for k in sorted(self_num):
print(k)
1. set의 중복제거 특징
2. 교집합 합집합처럼 빼고 더할 수 있는 특징