[프로그래머스]
프로그래머스 순위 검색 C++
Hevton
2023. 10. 2. 15:12
반응형
어려웠다.. 다른 사람의 풀이를 참고해서 공부한 뒤에 풀었다.
어떤 분은 비트마스킹으로 풀기도 했다. 쩔더라.
다시 한 번, 까먹을까봐 메모해놓는 부분은
lower_bound()는 iterator를 리턴한다는점.
lower_bound()는 이상 이니까, 문제에서 필요한 이상 과도 매칭이 잘 된다.
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> info, vector<string> query) {
vector<int> answer;
map<string, vector<int>> scores;
string ta[4][2] = {
{"-", ""},
{"-", ""},
{"-", ""},
{"-", ""}
};
for(auto i : info) {
stringstream ss(i);
int score;
ss >> ta[0][1] >> ta[1][1] >> ta[2][1] >> ta[3][1] >> score;
for(int a = 0; a < 2; a++) {
for(int b = 0; b < 2; b++) {
for(int c = 0; c < 2; c++) {
for(int d = 0; d < 2; d++) {
string key = ta[0][a] + ta[1][b] + ta[2][c] + ta[3][d];
scores[key].push_back(score);
}
}
}
}
}
for(auto itr = scores.begin(); itr != scores.end(); itr++){
sort(itr->second.begin(), itr->second.end());
}
for(auto q : query) {
string a, b, c, d;
string temp;
int score;
stringstream ss(q);
ss >> a >> temp >> b >> temp >> c >> temp >> d >> score;
string key = a + b + c + d;
answer.push_back(scores[key].end() - lower_bound(scores[key].begin(), scores[key].end(), score));
}
return answer;
}
반응형