문제 풀이
d(1) = 1 + 1 = 2
d(2) = 2 + 2 = 4
d(3) = 3 + 3 = 6
⋮
d(123) = 123 + 1 + 2 + 3
⋮
d(10000) = 10000 + 1 = 10001
- 1부터 10000까지의 n을 넣은 d(n)의 값을 set()에 넣고 중복을 제거해준다.
- 1부터 10000까지 담아 있는 숫자 리스트와 중복을 제거한 수열 리스트의 차집합을 출력해주면 된다.
solution
def self_number() :
not_self_number_list = set([]) # 중복을 제거함
for num in range(1,10001):
not_self_number_list.add(num+sum(list(map(int,str(num))))) # d(num)을 구해 set()집합형에 추가한다.
number_list = set(range(1,10001)) # 1~ 10000까지의 숫자 리스트를 만들고
print(*sorted(number_list - not_self_number_list), sep='\n') # 중복을 제거한 셀프 넘버가 아닌 리스트와 1~ 10000까지의 숫자 리스트의 차집합을 출력한다.
self_number()
- d(n) 값을 구하는 방식 num+sum(list(map(int,str(num))))
ex) d(123) = 123 + 1 + 2 + 3
- d(123) = 123 + sum(list(map(int, '123')))
- d(123) = 123 + sum([1, 2, 3])
- d(123) = 123 + 1 + 2 + 3
새롭게 배운점
set()
- 중복을 허용하지 않음.
- 순서가 없음
- 순서가 없기 때문에 index로 접근X (list나 tuple에 담아서 index로 접근)
set()의 값 추가/ 여러 값 추가/ 제거
a = set([1,2,3])
# 특정 값 추가
a.add(4)
print(a) # {1, 2, 3, 4}
# 여러 값 추가
a.update([5,6,7,8])
print(a) # {1, 2, 3, 4, 5, 6, 7, 8}
# 특정 값 제거
a.remove(1)
print(a) # {2, 3, 4, 5, 6, 7, 8}
set()의 교집합/합집합/차집합
- set()의 교집합
- & 연산자 사용
- .intersection() 사용
a = set([1,2,3,4,5])
b = set([3,4,5,6,7,8,9])
print(a & b) # {3, 4, 5}
print(a.intersection(b)) # {3, 4, 5}
- set()의 합집합
- | 연산자 사용
- .union() 사용
a = set([1,2,3,4,5])
b = set([3,4,5,6,7,8,9])
print(a | b) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(a.union(b)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
- set()의 차집합
- * 연산자 사용
- .difference() 사용
a = set([1,2,3,4,5])
b = set([3,4,5,6,7,8,9])
print(a - b) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(a.difference(b)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
'algorithm > 백준' 카테고리의 다른 글
[PYTHON] 11654 아스키코드 - 문자를 아스키 코드로, 아스키 코드를 문자로 (0) | 2023.01.16 |
---|---|
[PYTHON] 11720 숫자의 합 (0) | 2023.01.16 |
[PYTHON] 10871 X보다 작은 수 list comprehension (0) | 2023.01.14 |
[PYTHON] 10951 A+B -4 readlines/try-except (0) | 2023.01.12 |
[PYTHON] 25304 영수증 (0) | 2023.01.12 |
댓글