본문 바로가기

Algorithm/자료구조

(C++) - 백준(BOJ) 15720 : 카우버거

반응형

https://www.acmicpc.net/problem/15720

 

15720번: 카우버거

첫째 줄에는 주문한 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000) 둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진

www.acmicpc.net

자료구조를 이용해 푼 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

햄버거 개수 burgerNum, 사이드 메뉴 개수 sideNum, 음료개수 drinkNum, 전체 메뉴 가격 totalPrice, 최소 세트메뉴 가격 minPrice, 세트를 만들고 남은 메뉴들의 가격을 어디부터 측정할지 기준이될 변수 range, 각 메뉴에 대한 vector를 선언한 후 적절히 입력받습니다.

📔 풀이과정

1. setMenuList함수를 수행합니다.  각 메뉴의 가격을 입력받고 totalPrice에 더해줍니다. 10%할인이 가성비가 있으려면 비싼 세트가격에 적용할 수록 유리합니다. 각 메뉴 vector를 내림차순으로 정렬해줍니다.

 

2. getSaledPrice함수를 수행합니다. 세트메뉴를 만들고 세일된 가격을 반환합니다.3. getOtherPrice함수를 수행합니다. 세트메뉴를 만들고 남은 메뉴에 대한 전체 가격을 구해 반환해줍니다.

📔 정답출력

totalPrice, minPrice를 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
#define MAX 0x3f3f3f3f
using namespace std;

int burgerNum, sideNum, drinkNum, totalPrice, minPrice, range;
vector <int> burger, side, drink;

int getSaledPrice(){
  int price = 0;
  for(int i = 0; i < 1000; i++){
    if(i >= burgerNum || i >= sideNum || i >= drinkNum) break;
    price += (burger[i] + side[i] + drink[i]) * 9 / 10;
    range++;
  }
  return price;
}

int getPriceWithRange(vector <int> &menu){
  int price = 0;
  for(int i = range; i < menu.size(); i++){
    price += menu[i];
  }
  return price;
}

int getOtherPrice(){
  int price = 0;
  price += getPriceWithRange(burger);
  price += getPriceWithRange(side);
  price += getPriceWithRange(drink);
  return price;
}

void setMenuList(vector <int> &menu, int menuNum){
  menu.resize(menuNum);
  for(int i = 0; i < menuNum; i++){
    cin >> menu[i];
    totalPrice += menu[i];
  }
  sort(menu.rbegin(), menu.rend());
}

int main(){
  cin >> burgerNum >> sideNum >> drinkNum;
  setMenuList(burger, burgerNum);
  setMenuList(side, sideNum);
  setMenuList(drink, drinkNum);
  minPrice += getSaledPrice();
  minPrice += getOtherPrice();
  cout << totalPrice << '\n' << minPrice;
}

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.