[프로그래머스]

프로그래머스 순위 검색 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;
}
반응형