
도서 대여점의 만화책과 소설책의 대여 요금이 다음과 같습니다.
| 구분 | 대여 요금 | 추가 요금 |
|---|---|---|
| 만화책 | 첫 2일 500원 | 이후 1일당 200원씩 추가 |
| 소설책 | 첫 3일 1000원 | 이후 1일당 300원씩 추가 |
만화책과 소설책의 대여 요금을 계산하기 위해 아래 그림과 같이 Book 인터페이스와 ComicBook, Novel 클래스를 작성했습니다.

Book :
ComicBook :
Novel :
대여를 원하는 책들의 종류가 들어있는 리스트 book_types와 대여 기간 day가 매개변수로 주어질 때, 전체 대여 요금을 return 하도록 solution 함수를 작성하려고 합니다. 위의 클래스 구조를 참고하여 주어진 코드의 빈칸을 적절히 채워 전체 코드를 완성해주세요.
대여를 원하는 책들의 종류가 들어있는 리스트 book_types와 대여 기간 day가 solution 함수의 매개변수로 주어집니다.
전체 대여 요금을 return 해주세요.
| book_types | day | return |
|---|---|---|
| ["comic", "comic", "novel"] | 4 | 3100 |
만화책의 4일 대여요금 : 500 + 2002 = 900원
소설책의 4일 대여요금 : 1000 + 3001 = 1300원
만화책은 2권이므로 총 대여요금은 900 + 900 + 1300 = 3100원입니다.
from abc import *
class Book(metaclass=ABCMeta):
@abstractmethod
def get_rental_price(self, day):
pass
class ComicBook(@@@):
@@@:
cost = 500
day -= 2
if day > 0:
cost += @@@
return cost
class Novel(@@@):
@@@:
cost = 1000
day -= 3
if day > 0:
cost += @@@
return cost
def solution(book_types, day):
books = []
for types in book_types:
if types == "comic":
books.append(ComicBook())
elif types == "novel":
books.append(Novel())
total_price = 0
for book in books:
total_price += book.get_rental_price(day)
return total_price
#아래는 테스트케이스 출력을 해보기 위한 코드입니다.
book_types = ["comic", "comic", "novel"]
day = 4
ret = solution(book_types, day)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
from abc import *
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
def solution(book_types, day):
books = []
for types in book_types:
if types == "comic":
books.append(ComicBook())
elif types == "novel":
books.append(Novel())
total_price = 0
for book in books:
total_price += book.get_rental_price(day)
return total_price
#아래는 테스트케이스 출력을 해보기 위한 코드입니다.
book_types = ["comic", "comic", "novel"]
day = 4
ret = solution(book_types, day)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
from abc import *
class Book(metaclass=ABCMeta):
@abstractmethod
def get_rental_price(self, day):
pass
class ComicBook(Book):
def get_rental_price(self, day):
cost = 500
if day > 2:
cost += (day - 2) * 200 # 첫 2일은 500원, 이후 200원식 추가
return cost
class Novel(Book):
def get_rental_price(self, day):
cost = 1000
if day > 3:
cost += (day - 3) * 300 # 첫 3일은 1000원, 이후 300원식 추가
return cost
def solution(book_types, day):
books = []
for type in book_types:
if type == "comic":
books.append(ComicBook())
elif type == "novel":
books.append(Novel())
total_price = 0
for book in books:
total_price += book.get_rental_price(day)
return total_price
#아래는 테스트케이스 출력을 해보기 위한 코드입니다.
book_types = ["comic", "comic", "novel"]
day = 4
ret = solution(book_types, day)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
추상 클래스 Book를 상속받는 ComicBook 클래스와 Novel 클래스를 정의하는 문제이다.
1차 문제와 동일하게 추상 클래스를 완성하는 문제인데 COS Pro 1급 파이썬은 추상 클래스 정의 문제가 꼭 등장하는 것 같다.