본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "순위 검색"

by 시아나 2022. 5. 11.

https://programmers.co.kr/learn/courses/30/lessons/72412

 

코딩테스트 연습 - 순위 검색

["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt

programmers.co.kr


#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <unordered_map>

using namespace std;
vector<vector<string>> check = {
	{"cpp","java","python"},
	{"backend","frontend"},
	{"junior","senior"},
	{"chicken","pizza"}
};

vector<int> solution(vector<string> info, vector<string> query) {
	vector<int> answer;
	unordered_map<string, vector<int>> m;
	for (int k = 0; k < info.size(); k++) {
		vector<string> list = { "" };
		istringstream ss(info[k]);
		string s[4];
		int score;
		for (int i = 0; i < 4; i++) {
			vector<string> input;
			ss >> s[0] >> s[1] >> s[2] >> s[3] >> score;
			for (int t = 0; t < list.size();t++) {
				input.push_back(list[t] + s[i]);
				input.push_back(list[t] + "-");
			}
			list.assign(input.begin(), input.end());
		}
		for (string str : list) {
			m[str].push_back(score);
		}
	}
	for (auto it = m.begin(); it != m.end(); it++) {
		sort(it->second.begin(), it->second.end());
	}
	for (string q : query) {
		stringstream ss(q);
		string s[4];
		int score;
		string str = "";
		ss >> s[0]>> str >> s[1] >> str >> s[2] >> str >> s[3] >> score;
		str = s[0];
		for (int k = 1; k < 4; k++) {
			str += s[k];
		}
		vector<int> v = m[str];
		if (v.size() != 0) {
			auto it = lower_bound(v.begin(), v.end(), score);
			answer.push_back(v.size() - (it - v.begin()));
		}
		else answer.push_back(0);
	}
	return answer;
}