자기계발/그외 준비하는것

[Python]COS_PRO_기출2회차[1-5]풀이

개발자 덕구🐾 2022. 10. 26. 11:22
728x90

1번 도서 대여점 운영 

 

class Book(metaclass=ABCMeta):
	@abstractmethod
	def get_rental_price(self, day):
		pass
class ComicBook(Book):
	def get_rental_price(self,day):
		cost = 500
		day -= 2
		if day > 0:
			cost += 200*day
		return cost

class Novel(Book):
	def get_rental_price(self,day):
		cost = 1000
		day -= 3
		if day > 0:
			cost += 300*day
		return cost

 

 

 

 

 

2번 지하철 기다리기 

 

def solution(subway_times, current_time):
	current_minute = func_a(current_time)
	INF = 1000000000
	answer = INF
	for s in subway_times:
		subway_minute = func_a(s)
		if subway_minute>=current_minute:
			answer = subway_minute - current_minute
			break
	if answer == INF:
		return -1
	return answer

 

 

 

 

 

3번 경품 당첨자를 구해주세요 

def solution(num):
	next_num = num
	while True:
		next_num += 1
		length = func_b(next_num)
		if length % 2:
			continue
		divisor = func_a(length//2)  
		front = next_num // divisor
		back = next_num % divisor

		front_sum = func_c(front)
		back_sum = func_c(back)
		if front_sum == back_sum:
			break
	return next_num - num

 

 

 

 

4번 합이 k 배가 되는 수 

from itertools import combinations

def solution(arr, K):
	answer = 0
	arr = combinations(arr,3)
	for a in arr :
		sum_arr = sum(list(a))
		if sum_arr % K ==0 : answer +=1 
	return answer

 

 

 

 

 

 

5번 언제까지 오르막길이야...?!

def solution(arr):
	answer = 0
	n = len(arr)
	dp = [1]*n
	
	for i in range(n) :
		for j in range(i) :
			if arr[i] > arr[j] :
				dp[i] = max(dp[i],dp[j]+1)
	answer = max(dp)
	return answer

 

for i in range(n) : # i 를 마지막으로 하는 증가 수열의 길이를 알려고 한다. 

 

for j in range(i) : # i 이전의 값들과 비교한다. 

if arr[i] > arr[j] : # 이전 값들이 해당 값보다 작으면 거기에 i 수를 더해서 증가수열을 만들 수 있다. 

dp [i] 는 i 를 마지막으로 하는 증가수열의 길이를 저장하고 있으므로 (초기값은 1 )

기존 값과 j 의 dp값(j를 마지막으로 하는 증가수열의 길이) +1 을 비교해서 큰 값으로 갱신한다. 

j 값에 i를 증가시켜서 증가하는 수열을 만들려고 하기 때문이다. 

 

 

반응형