-
백준 파이썬 4673 셀프넘버BOJ 2020. 3. 21. 07:39
정말 아주아주 배울게 많은 문제다.
풀이
12345678def 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으로 하는 것도 봤는데,
123456789101112natural_number_set = set(range(1, 10001))generated_number_set= set()for i in range(1, 10001):for j in str(i):i += int(j)generated_number_set.add(i)self_number_set = natural_number_set - generated_number_setfor 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)
진짜 배울게 많은 문제였다.
'BOJ' 카테고리의 다른 글
백준 파이썬 1427 소트인사이드 [int(j) for j in input()] (0) 2020.03.22 for문으로 피보나치 구현 (0) 2020.03.22 백준 파이썬 2839 설탕 배달 (0) 2020.03.21 백준 파이썬 2309 일곱 난쟁이(random함수) (0) 2020.03.21 백준 파이썬 1193 분수찾기 (0) 2020.03.21