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 | 
