[BOJ] 4673 셀프 넘버 (Python)

이지예·2022년 4월 14일
0

백준

목록 보기
9/20

코드

def rm(n):
    sum=n
    while(n!=0):
        sum+=n%10
        n//=10
    return sum
a=[]
for i in range(1,10001):
    a.append(i)
b=[]
for i in range(1,9973):
    b.append(rm(i))
aset=set(a)
bset=set(b)
cset=aset-bset
c=sorted(list(cset))
for i in range(len(c)):
    print(c[i])

풀이

이번 문제는 쓰이는 문법이 어렵다거나 자잘하게 에러가 뜨는게 아니라 문제 요구사항 자체가 헷갈렸다. 10000보다 작거나 같은 셀프 넘버를 하나씩 증가하는 순서로 출력하는 문제였는데, 정수 n이 있을때 정수n에 각 자릿수의 합을 더해서 다른 정수 n2를 만들 수 있다면, 이때 정수 n을 생성자라 하고 이 생성자가 없는 숫자를 셀프 넘버라고 한다.
함수 카테고리에 있는 문제여서 함수 안에서 어떻게든 처리를 해야한다고 생각한 나머지, 재귀함수로 만들 생각을 했지만, 그보다 더 간단한 방법을 생각해내서 단순하게 풀어냈다. 10000까지의 숫자 중 생성자가 있는 숫자들을 빼주는 방법이다. 공통부분을 없애주는 기능이 있는 집합 문법을 처음 써볼 수 있는 문제였다.

0개의 댓글