알고리즘 공부/Cos Pro 문제풀이

Cos Pro [1차] 문제1) 음식전문점 운영 - JAVA

송테이토 2022. 11. 25. 23:22

01 COS PRO 1급 JAVA 1차

100%

[1차] 문제1) 음식전문점 운영 - JAVA

Practice

※ 프로그램 빈 칸 채우기 문제

□ 문제설명

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

  • 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

문제 해석

DeliveryStore 인터페이스를 상속받아서 PizzaStore를 만듦

메뉴리스트에 5개를 가지게 되는데 그게 Food이다.

  • set_order_list 는 문자열의 리스트를 아규먼트 갖고 반환은 X
  • get_total_price는 아규먼트 값은 없지만 리턴하는 것이 Integer이다.

이거를 상속받아서 PizzaStore

상속받는 다는것은! set_order_list 랑 get_total_price를 둘 다 가지고 있어야함

즉! 구현을 해줘야하는데 이는 implements해줘야함을 뜻

PizzaStore에는 menu_list라는 것이 존재한다.

Food는 name과 price 두가지 변수를 받는다.

여기서 PizzaStore가 DeliveryStore 인터페이스를 구현한다는 뜻은 PizzaStore가 DeliveryStore 를 상속받는다는 뜻이다.

정답

// 다음과 같이 import를 사용할 수 있습니다.
import java.util.*;

class Main {
    interface DeliveryStore{ //DeliveryStore가 인터페이스임을 알려줌
        public void setOrderList(String[] orderList);
        public int getTotalPrice();
    }
    
    class Food{
        public String name;
        public int price;
        public Food(String name, int price){
            this.name = name;
            this.price = price;
        }
    }
class PizzaStore implements DeliveryStore  { //상속은 이름만 써주면 된다
        private ArrayList<Food> menuList;
        private ArrayList<String> orderList;
        
//생성자
        public PizzaStore(){ //menuList 에 추가해줌!
            menuList = new ArrayList<Food>();
            String[] menuNames = {"Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"};
            int[] menuPrices = {11100, 12600, 13300, 21000, 19500};
            for(int i = 0; i < 5; i++)
                menuList.add(new Food(menuNames[i], menuPrices[i]));
            
            orderList = new ArrayList<String>();
        }

        //for문 안에 orderList에 값을 추가 하고 있다.
        public void setOrderList(String[]orderList){
            for(int i = 0; i < orderList.length; i++)
                this.orderList.add(orderList[i]);
        }
        //주문 받은 음식들을 while문으로 돌려 총 가격을 구하는중이다.
//getTotalPrice 메소드는 orderList에 들어있는 음식 가격의 총합을 return 합니다
        public int getTotalPrice(){
            int totalPrice = 0;
            Iterator<String> iter = orderList.iterator();
            while (iter.hasNext()) {
                String order = iter.next();
                for(int i = 0; i < menuList.size(); i++)
                    if(order.equals(menuList.get(i).name))
                        totalPrice += menuList.get(i).price;
            }
            return totalPrice;
        }
    }
    
    public int solution(String[] orderList) {
        DeliveryStore deliveryStore = new PizzaStore();
        
        deliveryStore.setOrderList(orderList);
        int totalPrice = deliveryStore.getTotalPrice();
        
        return totalPrice;
    }
// 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        Main sol = new Main();
        String[] orderList = {"Cheese", "Pineapple", "Meatball"};
        int ret = sol.solution(orderList);
        
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret + " 입니다.");
    }
}