프로그래머스
메뉴 리뉴얼 C++
paysmile
2021. 6. 30. 21:46
https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> m;
int sz;
bool cmp(pair<string, int> a, pair<string, int> b) {
return a.second > b.second;
}
void find_menu(int count, string str, int index, string tmp) {
if (count < sz) {
for (; index <str.size(); index++) {
find_menu(count + 1, str, index+1, tmp + str[index]);
}
}
else if (count == sz) {
m[tmp] += 1;
}
}
vector<string> solution(vector<string> orders, vector<int> course) {
vector<string> answer;
for (int i = 0; i<course.size(); i++) {
m.clear();
sz = course[i];
for (int j = 0; j<orders.size(); j++) {
sort(orders[j].begin(), orders[j].end());
find_menu(0, orders[j], 0, "");
}
vector<pair<string, int>> v(m.begin(), m.end());
sort(v.begin(), v.end(), cmp);
if (!v.empty()) {
int biggest = v[0].second;
if (biggest >= 2) {
for (int j = 0; j<v.size(); j++) {
if (v[j].second == biggest)
answer.push_back(v[j].first);
}
}
}
}
sort(answer.begin(), answer.end());
return answer;
}