728x90
d(n)이라는 함수를 만들어서 리스트에 셀프넘버가 아닌 것들을 저장하자
라는 생각으로 접근
시도1
lst = []
def d(n): #셀프넘버가 아닌 것들
num = n + int(n/1000) + int(n%1000/100) + int(n%100/10) + n%10
return num
n=0
while(True):
n += 1
if d(n) > 10000:
break
lst.append(d(n))
for i in range(1, 10001):
if i not in lst:
print(i)
아무리 생각해도 맞는거 같은데 자꾸 출력이 이상하게 나와....
그래서 왜 이상한지 손으로 노가다로 풀어봤다
저 코드를 실행하면 9999가 출력되는데 n = 9972일때 d(n) = 9999를 반환
하지만 내 코드에서는 n이 9972까지 가지 않고 반복문이 멈춤.
그 이유는 n = 9969가 되면 d(n) = 9969 + 9 + 9 + 6 + 9 = 10002가 되서 if d(n) > 10000 조건에서 반복문이 종료된다.
아 그러면 while문 대신 for 문으로 10001까지 반복해서 d(n)을 실행하고 그 중에서 d(n)이 10000을 넘어가는 걸 예외로 두면 되겠다.
시도 2 (통과)
lst = []
def d(n): #셀프넘버가 아닌 것들
num = n + n//1000 + n%1000//100 + n%100//10 + n%10
return num
for i in range(1,10001):
if d(i) <= 10000:
lst.append(d(i))
for i in range(1, 10001):
if i not in lst:
print(i)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[구현] 11866 요세푸스 문제 0 (0) | 2024.04.12 |
---|---|
[구현] 2563 색종이 (1) | 2024.04.12 |
[파이썬] 10870 피보나치 수 5 (0) | 2024.04.10 |
14916 거스름돈 (0) | 2024.04.10 |
28014 자바 (0) | 2024.04.09 |