처음에 이 문제를 보면서 여러 생각이 들었다.

이건 수학적 공식을 찾아서 계산을 해야 하는 문제인가?
우선 1의 자리에서는 홀수는 제외고.... 등 헛생각이 들었다

 

그러다 자세히 생각해보니 1에서 10,000까지 셀프넘버가 아닌 수를 모두 구해서 특정 리스트에 넣어두고

그 수만 제외한 1~10,000까지 수를 출력한다면 되겠구나 싶었다.

참.. 재밌는 문제다.

 

주어진 조건에서 입력값은 없고, 출력값만 1줄씩 출력하라고 나와있다.

 

풀이: 

def d():
  temp_num = [] 				#각 자리수를 취합할 임시 리스트
  notSelfNum_list = [] 			#셀프넘버가 아닌 모든 수를 저장할 리스트
  for i in range(1,10000): 		#셀프넘버가 아닌 모든 수를 구할 반복문
    sum = i				#자신의 수를 넣어준다.
    n = i 				#i값의 변경을 막기 위해 임시로 n에 저장
    
    for j in range(len(str(i))):	#i를 문자열로 변환 후 len()를 써서 해당 숫자의 자리수를 구할 수 있다. 
      temp_num.append(n%10)			#10의 나머지수를 temp_num 리스트에 저장 
      sum += temp_num[j]			#해당값을 바로 sum에 더해준다.
      n = n//10						#그 후 10으로 나눠줘야 다음 자리수를 저장할 수 있다.
      
    notSelfNum_list.append(sum)		#계산된 값은 notSelfNum_list에 저장한다.
    temp_num = [] 
    sum = 0					#temp리스트와 sum은 반복문이 끝날때 초기화를 꼭 해줘야 재사용가능

  for k in range(1,10000):			 #셀프넘버만 출력할 반복문
    if k not in notSelfNum_list: 	# not in 조건을 사용해서 셀프넘버만 출력
      print(k)
      
d()

 

'코딩' 카테고리의 다른 글

백준 5622번 다이얼 파이썬  (0) 2022.10.17
백준 2908번 상수 파이썬  (0) 2022.10.14
백준 2675번 문자열 반복 파이썬  (0) 2022.10.14
백준 4344번 평균은 넘겠지 초보 풀이  (0) 2022.10.11
개발 노트 시작 동기  (0) 2022.09.24

+ Recent posts