본문 바로가기
프로그래머스

메뉴 리뉴얼 C++

by paysmile 2021. 6. 30.

 

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;
}

'프로그래머스' 카테고리의 다른 글

광고 삽입 C++  (0) 2021.07.07
순위 검색 C++  (0) 2021.07.01
신규 아이디 C++  (0) 2021.06.28
가장 먼 노드 C++  (0) 2021.04.22
기둥과 보 설치 C++  (0) 2020.11.09