[python 기초] 백준: 함수 (15596,4673,1065) / 함수, set의 합집합/교집합/차집합 구하기

EMMA·2022년 2월 19일
0

[python] 백준 시리즈

목록 보기
6/14
post-thumbnail

함수 문제를 풀어보자!


📍In a nutshell...

  • 함수 정의하기 (def 함수명, return값 표기)
  • set()은 합집합/차집합/교집합을 계산할 때 매우 유용하다!
    • 합집합: set1 | set2, set1.union(set2)
    • 교집합: set1 & set2, set1.intersection(set2)
    • 차집합: set1 - set2, set1.difference(set2)

#15596번

정수 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<=99: 모든 수가 한수다. 개수를 출력해야 하므로, 입력한 숫자 그대로 표시하면 된다.
  • N>=100: 등차수열이 성립하는지 계산해야 한다. 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))




출처: 백준

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글