Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 레스토랑의 음식 주문 테이블 표시

<시간/>

고객이 레스토랑에서 수행한 주문을 나타내는 배열 주문이 있다고 가정합니다. 따라서 order[i]=[cust_namei, table_numi, food_itemi] 여기서 cust_namei는 고객 이름, table_numi는 고객 테이블 번호, food_itemi는 고객이 주문한 항목입니다.

레스토랑의 "디스플레이 테이블"을 반환해야 합니다. 여기서 "디스플레이 테이블"은 행 항목이 각 테이블이 주문한 각 식품 항목의 수를 나타내는 테이블입니다. 첫 번째 열은 테이블 번호이고 나머지 열은 알파벳 순서로 각 식품 항목에 해당합니다. 첫 번째 행은 첫 번째 열이 "Table"이고 그 뒤에 음식 이름이 오는 헤더여야 합니다.

따라서 입력이 order =[["Amal","3","Paratha"],["Bimal","10","Biryni"],["Amal","3","Fried Chicken "],["Raktim","5","Water"],["Raktim","5","Paratha"],["Deepak","3","Paratha"]], 출력은 be [["테이블","비리니","후라이드 치킨","파라타","물"],["3","0","1","2","0"],["5 ","0","0","1","1"],["10","1","0","0","0"]]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 하나의 맵 정의

  • 하나의 세트 이름 정의

  • 한 세트 정의

  • 각 요소에 대해 순서 목록

    • t

      에 삽입[1]
    • 확인 :=사실

    • ok가 거짓이면 -

      • v =공백을 사용하여 분할한 배열[2]

      • v의 각 요소 x에 대해 수행

        • (m[it[1], x] 1씩 증가)

        • 이름에 x 삽입

    • 그렇지 않으면

      • (m[it[1], it[2]] 1씩 증가)

      • 이름에 삽입[2]

  • 하나의 2D 배열 ret 정의

  • 배열 임시를 정의하고 이름에서 요소 복사

  • temp

    의 첫 번째 요소로 "Table"을 삽입합니다.
  • ret 끝에 temp 삽입

  • t의 각 요소에 대해 수행

    • 배열 정의

    • te의 끝에 삽입

    • 이름의 각 요소 x에 대해 수행

      • m[it, x]를 te

        끝에 문자열로 삽입
    • ret 끝에 te 삽입

  • ret 배열 정렬

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<string> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
public:
   vector <string> split(string& s, char delimiter){
      vector <string> tokens;
      string token;
      istringstream tokenStream(s);
      while(getline(tokenStream, token, delimiter)){
         tokens.push_back(token);
      }
      return tokens;
   }
   static bool cmp(vector <string>& a, vector <string>& b){
      lli an = stol(a[0]);
      lli bn = stol(b[0]);
      return an < bn;
   }
   vector<vector<string>> displayTable(vector<vector<string>>& o) {
      map <string, map < string, int> >m;
      set <string> names;
      set <string> t;
      for(auto &it : o){
         t.insert(it[1]);
         bool ok = true;
         if(!ok){
            vector <string> v = split(it[2], ' ');
            for(auto& x : v){
               m[it[1]][x]++;
               names.insert(x);
            }
         }
         else{
            m[it[1]][it[2]]++;
            names.insert(it[2]);
         }
      }
      vector < vector <string> > ret;
      vector <string> temp(names.begin(), names.end());
      temp.insert(temp.begin(), "Table");
      ret.push_back(temp);
      for(auto& it : t){
         vector <string> te;
         te.push_back(it);
         for(auto& x : names){
            te.push_back(to_string(m[it][x]));
         }
         ret.push_back(te);
      }
      sort(ret.begin() + 1, ret.end(), cmp);
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<string>> v = {{"Amal","3","Paratha"},{"Bimal","10","Biryni"},{"Amal","3","Fried
Chicken"},{"Raktim","5","Water"},{"Raktim","5","Paratha"},{"Deepak"," 3","Paratha"}};
   print_vector(ob.displayTable(v));
}

입력

{{"Amal","3","Paratha"},{"Bimal","10","Biryni"},{"Amal","3","Fried Chicken"},{"Raktim","5","Water"},{"Raktim","5","Paratha"},{"Deepak"," 3","Paratha"}}

출력

[[Table, Biryni, Fried Chicken, Paratha, Water, ],[3, 0, 1, 2, 0, ],[5, 0, 0, 1, 1, ],[10, 1, 0, 0, 0, ],]