본문 바로가기

COS pro 강의자료

COS pro python 1차 1번문제

''' 

구성은 

1. 문제 설명 
2. 원본 문제(코드) 
3. 강사 답안 
4. 주최측 답안 

순으로 되어있습니다. 

빈칸채우기와 한 줄 수정의 경우  
강사 답안과 주최 답안이 유사 / 동일할 수 있습니다. 


#문제1 
배달음식 전문점 운영을 위해 다음과 같이 DeliveryStore 인터페이스와  PizzaStore, Food 클래스를 작성했습니다. 

![image](https://s3.ap-northeast-2.amazonaws.com/grepp-cloudfront/programmers_imgs/challengeable-imgs/20180316_deli_python1.png) 

* DeliveryStore : 
  * DeliveryStore는 배달 음식점의 인터페이스입니다. 
  * 배달 음식점은 set_order_list와 get_total_price 함수를 구현해야 합니다. 
  * set_order_list 함수는 주문 메뉴의 리스트를 매개변수로 받아 저장합니다. 
  * get_total_price 함수는 주문받은 음식 가격의 총합을 return 합니다. 

* Food :  
  * Food는 음식을 나타내는 클래스입니다. 
  * 음식은 이름(name)과 가격(price)으로 구성되어있습니다. 

* PizzaStore 
  * PizzaStore는 피자 배달 전문점을 나타내는 클래스이며 DeliveryStore 인터페이스를 구현합니다. 
  * menu_list는 피자 배달 전문점에서 주문 할 수 있는 음식의 리스트를 저장합니다. 
  * order_list는 주문 받은 음식들의 이름을 저장합니다. 
  * set_order_list 함수는 주문 메뉴를 받아 order_list에 저장합니다. 
  * get_total_price 함수는 order_list에 들어있는 음식 가격의 총합을 return 합니다. 

주문 메뉴가 들어있는 리스트 order_list가 매개변수로 주어질 때, 주문한 메뉴의 전체 가격을 return 하도록 solution 함수를 작성하려고 합니다.  
위의 클래스 구조를 참고하여 주어진 코드의 빈칸을 적절히 채워 전체 코드를 완성해주세요. 

--- 
##### 매개변수 설명 
주문 메뉴가 들어있는 리스트 order_list가 solution 함수의 매개변수로 주어집니다. 

* order_list의 길이는 1 이상 5이하입니댜. 
* order_list에는 주문하려는 메뉴의 이름들이 문자열 형태로 들어있습니다. 
  * order_list에는 같은 메뉴의 이름이 중복해서 들어있지 않습니다. 
* 메뉴의 이름과 가격은 PizzaStore의 생성자에서 초기화해줍니다. 

--- 
##### return 값 설명 
주문한 메뉴의 전체 가격을 return 해주세요. 

--- 
##### 예시 

| order_list                           | return | 
|-------------------------------------|--------| 
| ["Cheese", "Pineapple", "Meatball"] | 51600  | 


from abc import * 
  
class DeliveryStore(metaclass=ABCMeta): 
    @abstractmethod 
    def set_order_list(self, order_list): 
        pass 
     
    @abstractmethod 
    def get_total_price(self): 
        pass 
     
class Food: 
    def __init__(self, name, price): 
        self.name = name 
        self.price = price 
         
class PizzaStore@@@: 
    def __init__(self): 
        menu_names = ["Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"] 
        menu_prices = [11100, 12600, 13300, 21000, 19500]; 
        self.menu_list = [] 
        for i in range(5): 
            self.menu_list.append(Food(menu_names[i], menu_prices[i])) 
         
        self.order_list = [] 
     
    def @@@: 
        for order in order_list: 
            self.order_list.append(order) 

    def @@@: 
        total_price = 0 
        for order in self.order_list: 
            for menu in self.menu_list: 
                if order == menu.name: 
                    total_price += menu.price 
        return total_price  
             
def solution(order_list): 
    delivery_store = PizzaStore() 
     
    delivery_store.set_order_list(order_list) 
    total_price = delivery_store.get_total_price() 
    return total_price 

#The following is code to output testcase. 
order_list = ["Cheese", "Pineapple", "Meatball"] 
ret = solution(order_list) 

#Press Run button to receive output.  
print("Solution: return value of the function is", ret, ".") 


''' 

#from abc import * 
  
class DeliveryStore(): 
    #@abstractmethod 
    def set_order_list(self, order_list): 
        pass 
     
    #@abstractmethod 
    def get_total_price(self): 
        pass 
    ''' 
    abc가 존재하지 않음. 따라서 상속받을 정보가 없음. 
    @abstractmethod 또한 존재하지 않으므로 주석 처리함 
    ''' 
     
class Food: 
    def __init__(self, name, price): 
        self.name = name 
        self.price = price 
         
class PizzaStore(DeliveryStore): 
    ''' 
    이 자리에 오는 것은 클래스 상속이기 때문에 상속받을 클래스를 넣음 
    ''' 
    def __init__(self): 
        menu_names = ["Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"] 
        menu_prices = [11100, 12600, 13300, 21000, 19500]; 
        self.menu_list = [] 
        for i in range(5): 
            self.menu_list.append(Food(menu_names[i], menu_prices[i])) 
         
        self.order_list = [] 

        ''' 
        DeliveryStore에는 set_order_list와 get_total_price 메소드가 있음. 
        그리고 solution 함수에는 PizzaStore 클래스에서 set_order_list와 get_total_price 메소드를 사용함. 
        따라서 상속받을 클래스는 DeliveryStore, 사용할 메소드는 set_order_list와 get_total_price 
        ''' 
     
    def set_order_list(self, order_list): 
        for order in order_list: 
            self.order_list.append(order) 

    def get_total_price(self): 
        total_price = 0 
        for order in self.order_list: 
            for menu in self.menu_list: 
                if order == menu.name: 
                    total_price += menu.price 
        return total_price  
             
def solution(order_list): 
    delivery_store = PizzaStore() 
     
    delivery_store.set_order_list(order_list) 
    total_price = delivery_store.get_total_price() 
    return total_price 

#The following is code to output testcase. 
order_list = ["Cheese", "Pineapple", "Meatball"] 
ret = solution(order_list) 

#Press Run button to receive output.  
print("Solution: return value of the function is", ret, ".") 

''' 
주최 제공답안 
from abc import * 
  
class DeliveryStore(metaclass=ABCMeta): 
    @abstractmethod 
    def set_order_list(self, order_list): 
        pass 
     
    @abstractmethod 
    def get_total_price(self): 
        pass 
     
class Food: 
    def __init__(self, name, price): 
        self.name = name 
        self.price = price 
         
class PizzaStore(DeliveryStore): 
    def __init__(self): 
        menu_names = ["Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"] 
        menu_prices = [11100, 12600, 13300, 21000, 19500]; 
        self.menu_list = [] 
        for i in range(5): 
            self.menu_list.append(Food(menu_names[i], menu_prices[i])) 
         
        self.order_list = [] 
     
    def set_order_list(self, order_list): 
        for order in order_list: 
            self.order_list.append(order) 

    def get_total_price(self): 
        total_price = 0 
        for order in self.order_list: 
            for menu in self.menu_list: 
                if order == menu.name: 
                    total_price += menu.price 
        return total_price  
             
def solution(order_list): 
    delivery_store = PizzaStore() 
     
    delivery_store.set_order_list(order_list) 
    total_price = delivery_store.get_total_price() 
    return total_price 
''' 

'COS pro 강의자료' 카테고리의 다른 글

COS pro python 1차 6번문제  (0) 2020.03.20
COS pro python 1차 5번문제  (0) 2020.03.20
COS pro python 1차 4번문제  (0) 2020.03.20
COS pro python 1차 3번문제  (0) 2020.03.20
COS pro python 1차 2번문제  (0) 2020.03.20