📍In a nutshell...
set()
은 합집합/차집합/교집합을 계산할 때 매우 유용하다! 정수 n개가 주어졌을 때, 모든 합을 구하면 된다.
함수명은 def solve(a: list)
로 정의되어 있어서 그대로 사용했다.
def solve(a):
return sum(a) #sum: list안에 있는 값을 모두 더해줌
#4673번
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 문제다.
셀프 넘버란 생성자가 없는 숫자를 말한다. 생성자 n은 n과 각 자릿수를 모두 더하여 새로운 넘버를 생성한다. (33+3+3 = 39. 33은 39의 생성자)
결국 생성자 n을 통해 계산되는 숫자를 제거하면 셀프 넘버가 남는다.
(각 숫자 집단을 set형태로 통일하고, 차집합 사용)
def con_num(n):
if n<100:
return n+(n//10)+(n%10)
elif n<1000:
return n+(n//100)+((n%100)//10)+((n%100%10))
elif n<10000:
return n+(n//1000)+((n%1000)//100)+((n%1000%100)//10)+((n%1000%100)%10)
total_num = set(list(range(1,10001))) #차집합 계산하기 위해 set 적용
self_num = set([con_num(x) for x in range(1,10001)]) #생성자가 2개인 경우도 있는데 set을 통해 중복 제거됨
result = sorted(total_num - self_num) #sorted: 정렬된 결과를 돌려줌
for answer in result:
print(answer)
#1065
한수의 개수를 출력하는 문제로, 한수는 숫자의 각 자릿수끼리 등차수열을 이루는 수를 말한다. 입력값 N을 넣으면 2가지 경우의 수가 생기는데,
N[0]-N[1] == N[1]-N[2]
이면 한수이며(이 때 N은 문자열로 바꾸었다고 가정), 이를 count 해서 99부터 더하면 된다. N = int(input())
def solve(a):
if a <100: return a #1~a까지 모두 한수, a 그대로 출력하면 됨
else:
cnt = 0
for i in range(100,a+1):
b = str(i) #문자로 바꾸어 각각의 숫자로 쪼갬
if int(b[0])-int(b[1]) == int(b[1])-int(b[2]):
cnt += 1
return 99 + i #99 + count된 개수
print(solve(N))
출처: 백준