백준 4673번 파이썬
한 번 풀었는데 까먹어서 다시 풀어본 문제..
사실 그런 문제가 많다
문제는
자기 자신과 각 자리의 수들을 더해서 나온 값을 d(n)이라고 할 때
n 은 생성자라고 합니다.
여기서 n이 없는 값이 셀프 넘버라고 합니다.
그래서 n과 각 자리의 수를 더해서 나온 값들은 셀프 넘버가 될 수 없습니다.
def self():
n = 0
li = []
for i in range(0,10001):
if i < 10:
n = i + i
li.append(n)
elif i < 100:
n = i + i//10 + i%10
li.append(n)
elif i < 1000:
n = i + i//100 + (i%100)//10 + i%10
li.append(n)
elif i < 10000:
n = i + i//1000 + i%1000//100 + i%100//10 + i%10
li.append(n)
if n <= 10001:
li.append(n)
li.sort()
for j in range(0,10001):
if j not in li:
print(j)
self();
저는 단순하게 생각해서 노가다를 했습니다.
1부터 10001까지 리스트 중에서 셀프 넘버가 아닌 수들을 빼자!
여기서 셀프 넘버가 아닌 수는 일의 자리, 십의 자리로 더해진 수들이겠죠?
그래서 자기 자신과 각 자리로 분해한 수를 더한 값들은 1부터 10001까지의
리스트에서 빼주면 되는 겁니다.
그래서 10의 자리 단위로 나누어 10보다 작을 때, 100보다 작을 때,
1000보다 작을 때, 10000보다 작을 때를 나누어 각 자리를 몫과 나머지로 계산하여
더했습니다.
이 문제는 사실 함수를 쓰지 않아도 정답처리되는 문제입니다.
함수에서 포문들을 꺼내서 포문으로만 계산해도 맞더라고요
문제가 함수에 속해 있어 함수를 사용했는데 왜 함수를 사용해야만 했는지는
더 경험이 쌓이면 알게 되겠죠..?
Author And Source
이 문제에 관하여(백준 4673번 파이썬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@iillyy/백준-4673번-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)