처음에 이 문제를 보면서 여러 생각이 들었다.
이건 수학적 공식을 찾아서 계산을 해야 하는 문제인가?
우선 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 |