-
[프로그래머스/Level 2] 순위 검색 (C++)알고리즘 문제풀이/프로그래머스 2021. 2. 8. 16:40
programmers.co.kr/learn/courses/30/lessons/72412
카카오 기출
아래와 같이 info의 언어, 직군, 경력, 소울 푸드로 모든 조합을 만듭니다. 점수를 기준으로 오름차순 정렬한 후, lower_bound() 함수를 통해 만족하는 조건의 지원자들의 수를 찾으면 됩니다. 조합은 메뉴 리뉴얼때와 마찬가지로 비트 연산을 이용했습니다.
#include <string> #include <vector> #include <map> #include <sstream> #include <algorithm> using namespace std; unordered_map<string, vector<int> > scores; string s[4], num; void getCombi(int num) { for(int i = 0; i < 16; i++) { string tmp = ""; for(int j = 0; j < 4; j++) { if(i & (1 << j)) tmp.push_back('-'); else tmp += s[j]; } scores[tmp].push_back(num); } } vector<int> solution(vector<string> info, vector<string> query) { vector<int> answer; for(auto &i : info) { stringstream ss(i); ss >> s[0] >> s[1] >> s[2] >> s[3] >> num; getCombi(stoi(num)); } for(auto &s : scores) { sort(s.second.begin(), s.second.end()); } for(auto &q : query) { int score; stringstream ss(q); ss >> s[0] >> num >> s[1] >> num >> s[2] >> num >> s[3] >> num; score = stoi(num); vector<int> v = scores[s[0] + s[1] + s[2] + s[3]]; 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; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 3] 이중우선순위큐 (C++) (0) 2021.02.10 [프로그래머스/Level 3] 디스크 컨트롤러 (C++) (0) 2021.02.09 [프로그래머스/Level 3] 섬 연결하기 (C++) (0) 2021.02.05 [프로그래머스/Level 3] 네트워크 (C++) (0) 2021.02.04 [프로그래머스/Level 3] 풍선 터트리기 (C++) (0) 2021.02.04