[백준] 4673번 : 셀프 넘버(파이썬)

뚝딱이 공학도·2022년 1월 17일
0

문제풀이_백준

목록 보기
22/160





문제





나의 첫번째 답안

setNum=set(i for i in range(1,10000))
genNum=set()
def d_number(n):
    n+=sum(map(int,str(n)))
    return n
for i in setNum:
    genNum.add(d_number(i))
print(sorted(setNum.difference(genNum)))

setNum의 범위를 잘못 지정했다.

나의 두번째 답안

setNum=set(i for i in range(1,10001))
genNum=set()
def d_number(n):
    n+=sum(map(int,str(n)))
    return n
for i in setNum:
    genNum.add(d_number(i))
print(sorted(setNum.difference(genNum)))

출력 형식을 잘못했다는 것을 알게되었다.
인자를 하나하나 출력해주어야 한다.

나의 답안

setNum=set(range(1,10001))
genNum=set()
def d_number(n):
    n+=sum(map(int,str(n))) #각자리 더하기
    return n
for i in setNum: #생성자 추가
    genNum.add(d_number(i))

for i in sorted(setNum.difference(genNum)):
    print(i)
#print(sorted(setNum.difference(genNum))) #전체 수에서 생성자가 아닌 수(셀프넘버) 출력

생성자가 없는 숫자를 셀프넘버라고 한다.
이를 구해서 출력해주어야 한다.
우선, 생성자를 계산해 셀프넘버가 아닌 숫자를 구하고
전체 범위에서 이를 제외해주면 된다.

setNum에는 1부터 10,000까지의 숫자를 저장해주었다.
genNum에는 빈 집합을 저장해주었다.
d_number 함수는 문제의 d(n)으로 각 자리 숫자를 더한다. 즉 생성자를 갖는 숫자를 구한다.
이후 생성자를 빈 집합에 추가해주고,

for i in sorted(setNum.difference(genNum)):

diffrence를 사용해 전체 범위(setNum)에서 생성자 집합(genNum)를 제외해주고(차집합)
sorted로 오름차순으로 정렬해준다.

0개의 댓글