Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

운기의 블로그

프로그래머스 - 메뉴 리뉴얼 본문

알고리즘

프로그래머스 - 메뉴 리뉴얼

운띠야 2022. 9. 13. 15:28
#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;



vector<string> solution(vector<string> orders, vector<int> course) {
	vector<string> answer;	
	map<string, int> result;

	for (int i = 0; i < orders.size(); i++) {
		sort(orders[i].begin(), orders[i].end());
	}
	
	for (int i = 0; i < course.size(); i++) {
		int course_size = course[i];

		for (int j = 0; j < orders.size(); j++) {
			int order_size = orders[j].size();
		
			if (course_size <= order_size){
				vector<bool> visit(order_size - course_size, false);
				visit.insert(visit.end(), course_size, true);
			
				do {

					string tmp = "";
					for (int k = 0; k < order_size; k++) {
						if (visit[k]) {
							tmp = tmp + orders[j][k];
						}
					}

					// tmp 가 존재하면
					if (result.count(tmp)) {
						result[tmp] ++;
					}
					else {
						result[tmp] = 1;
					}

				} while (next_permutation(visit.begin(), visit.end()));
			}			
		}
	}

	// 1개인거 지우기 
	for (auto iter = result.begin(); iter != result.end();) {
		if (iter->second <= 1) {
			iter = result.erase(iter);
		}
		else {
			iter++;
		}
	}

	// 가장 많이 주문된거 찾기

	for (int i = 0; i < course.size(); i++) {
		int course_count = course[i];
		vector<string> tmp;
		int max = 0;

		for (auto iter = result.begin(); iter != result.end(); iter++) {
			if (iter->first.size() == course_count) {
				//최대값 갱신
				if (max < iter->second) {
					max = iter->second;
					if (tmp.size() > 0) {
						tmp.clear();
						tmp.push_back(iter->first);
					}
					else {
						tmp.push_back(iter->first);
					}
				}
				//최대값이랑 같을때
				else if (max == iter->second) {
					tmp.push_back(iter->first);
				}
			}
		}
		for (int j = 0; j < tmp.size(); j++) {
			answer.push_back(tmp[j]);
		}
	}

		

	sort(answer.begin(), answer.end());
	return answer;
}

'알고리즘' 카테고리의 다른 글

프로그래머스 - 신규 아이디 추천  (0) 2022.09.06
백준 - 2096 내려가기  (0) 2022.07.02
백준 - 2748번 피보나치 수 2  (0) 2022.07.01
백준 - 1806 부분합  (0) 2022.07.01
백준 - 2003번 수들의 합 2  (0) 2022.06.27