Language/C++

[프로그래머스][level2][c++] 2021 KAKAO BLIND RECRUITMENT - 순위 검색 - 컴도리돌이

컴도리돌이 2021. 8. 27. 09:00
728x90
 

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

["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

 

  1. 해당 info가 각 항목마다 나올 수 있는 경우의 수를 다 저장한다. 왜냐하면 각 항목에 '-' 표시는 어떤 항목이 와도 상관 없기 때문에 나올 수 있는 경우의 수를 모두 다 저장시킨다. 해당 작업은 브루트 포스 방식으로 map 함수에 해당 string 값에 score를 저장을 했다.
  2. 값에 따라서 오름차순 정렬을 시킨다.
  3. 순차적으로 query 값을 읽어서 기준 값보다 이상인 값의 개수를 low_bound를 이용해서 발견한다.

 

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

using namespace std;

vector<int> solution(vector<string> info, vector<string> query) {
    vector<int> answer(query.size(),0);
    map<string,vector<int>> info_;
    string lang,job,level,food,score,temp;
    
    for(auto v : info)
    {
        vector<vector<string>> vs(4,vector<string>(2,"-"));
        stringstream ss(v);
        ss >> lang >> job >> level >> food >> score;
        vs[0][0] = lang;
        vs[1][0] = job;
        vs[2][0] = level;
        vs[3][0] = food;
        for(int i=0 ; i<2; i++)
        {
            string t1,t2,t3,t4;
            t1 = vs[0][i];
            for(int j=0; j<2; j++)
            {
                t2 = vs[1][j];
                for(int k=0; k<2; k++)
                {
                    t3 = vs[2][k];
                    for(int l =0; l<2; l++)
                    {
                        t4 = vs[3][l];
                        info_[t1 + t2 + t3 + t4].push_back(stoi(score));
                    }
                }
            }
        }
    }
    for(auto itr = info_.begin(); itr != info_.end(); itr++)
    {
        sort(itr->second.begin(),itr->second.end());
    }
    int index = 0;
    for(auto v : query)
    {
        stringstream ss(v);
        ss >> lang >> temp >> job >> temp >> level >> temp >> food >> score;
        string s = lang + job + level + food;
        auto itr = lower_bound(info_[s].begin(),info_[s].end(),stoi(score));
        answer[index++] = info_[s].size() - (itr - info_[s].begin());
    }
    
    return answer;
}