สมมติว่าเรามีอาร์เรย์ orders แสดงออเดอร์ของลูกค้า orders[i] = [customer_name, table_number, food_item] เราต้องสร้าง "display table" แสดงจำนวนอาหารแต่ละชนิดที่แต่ละโต๊ะสั่ง คอลัมน์แรกเป็นหมายเลขโต๊ะ ตามด้วยชื่ออาหารเรียง A-Z แถวแรกเป็น header
ตัวอย่าง: orders = [["Amal","3","Paratha"],["Bimal","10","Biryni"],...] ผลลัพธ์เป็นตาราง 4x5
วิธีแก้ปัญหา
- ใช้ nested map: table → (food → count)
- เก็บ set ของชื่ออาหารและหมายเลขโต๊ะ
- สร้าง header: "Table" + sorted food names
- สร้างแถวข้อมูล: table number + count ของแต่ละอาหาร
- เรียงแถวตามหมายเลขโต๊ะตัวเลข
ตัวอย่างโค้ด C++
#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, t;
for(auto& it : o){
t.insert(it[1]);
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;
}
};
int 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, ],]