BOJ

백준 파이썬 4673 셀프넘버

Coding_SJ 2020. 3. 21. 07:39

 

 

 

 

 

 

 

 

 

 

정말 아주아주 배울게 많은 문제다.

 

 

 

풀이

1
2
3
4
5
6
7
8
def self_number():
    a = []
    for i in range(1,10000):
        a.append(i + sum([int(j) for j in str(i)]))
    return set(range(1,10000)) - set(a)
sf = self_number()
for i in sorted(sf):
    print(i)
 
cs

 

내가 직접 푼 풀이는 아니고 나도 여기저기 찾아보면서 참고했는데.. 진짜 배울게 많다

차집합을 구하기 위해서, list를 set으로 바꿔주는 작업을 했다는 것과

함수안에서 list를 만들어서 하나하나 append해줄 수 있다는 것..

그리고 무엇보다 sum [ int(j) for j in str(i) ] 라는 표현 자체도 배울만한 점이다.

 

 

 

 

 

list로 안하고 그냥 바로 set으로 하는 것도 봤는데,

 

[백준/4673/파이썬3(python3)] 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을..

this-programmer.com

 

1
2
3
4
5
6
7
8
9
10
11
12
natural_number_set = set(range(110001))
generated_number_set= set()
 
for i in range(110001):
    for j in str(i):
        i += int(j)
    generated_number_set.add(i)
 
self_number_set = natural_number_set - generated_number_set
 
for i in sorted(self_number_set):
    print(i)
 
cs

1부터 10000까지 자연수 집합을 정의하고,

각 자리수를 더해주기 위해서 1부터 10000까지의 자연수를 str으로 받은다음

str을 배열로 간주해서 원소 하나하나 integer화 시킨다음 더해주는 식으로..

그렇게 각 자리수를 더한 작업이 끝나면 set에 .add (list에서는 append라면 set에서는 add)

set이니까 차집합이 문제없이 되는거고..

원소 하나하나를 세로로 출력하기 위해서 for문안에서 print(i)

 

 

 

 

진짜 배울게 많은 문제였다.