조합과 map을 사용해서 해결할 수 있는 문제이다. (프로그래머스 level2)
문제는 다음과 같다.
메뉴 리뉴얼
1~5 반복하면됨
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map <string,int> m;
vector<string> solution(vector<string> orders, vector<int> course) {
vector<string> answer;
for(int i=0; i<course.size(); i++)
{
int cnt = course[i];
for(int j=0; j<orders.size(); j++)
{
int len = orders[j].length();
if(len < cnt) continue;
sort(orders[j].begin(), orders[j].end());
vector <bool> v(len-cnt, false);
v.insert(v.end(), cnt, true);
do{
string tmp = "";
for(int k=0; k<len; k++)
{
if(v[k]){
tmp += orders[j][k];
}
}
if(m.find(tmp) == m.end()){
m.insert({tmp,1});
}
else{
m[tmp]++;
}
}while(next_permutation(v.begin(), v.end()));
}
int maxCnt = 0;
for(auto itr=m.begin(); itr!=m.end(); itr++)
{
if(maxCnt < itr->second) maxCnt = itr->second;
}
if(maxCnt==1) continue;
for(auto itr=m.begin(); itr!=m.end(); itr++)
{
if(maxCnt == itr->second)
{
answer.push_back(itr->first);
}
}
m.clear();
}
sort(answer.begin(), answer.end());
return answer;
}