https://school.programmers.co.kr/learn/courses/30/lessons/72412
이번 문제는 2021 KAKAO BLIND RECRUITMENT 문제였습니다.
📝 문제 풀이
1. info 배열의 각 원소의 값을 stringstream으로 공백을 제거하고 코딩테스트 점수를 제외한 값은 tmp[i][0]에 삽입
💡 tmp 벡터는 [['java', '-'], ['backend', '-'], ['junior', '-'], ['pizza', '-']] 와 같은 형태
2. scores 맵에 tmp 벡터에서 발생할 수 있는 모든 query를 키로 하여 코딩테스트 점수를 저장 ⭐️
3. scores 맵의 각 키에 대해 코딩테스트 점수를 오름차순 정렬
4. query 벡터의 각 문의조건에 대해 "and"를 제외한 [조건]을 key 변수에 저장
5. lower_bound 함수를 사용하여 scores[key]에서 코딩테스트 점수가 score 이상인 사람의 수를 찾아서 answer 벡터에 삽입
👩🏻💻 C++ 코드
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <map>
using namespace std;
map<string, vector<int>> scores; // 각 query에 대한 코딩테스트 점수를 담은 객체
// 각 info에 대해 가능한 모든 query에 코딩테스트 점수 저장
void storeScore(vector<vector<string>> &tmp, int score) {
string c1, c2, c3, c4;
for (int i=0; i<2; i++) {
c1 = tmp[0][i];
for (int j=0; j<2; j++) {
c2 = tmp[1][j];
for (int k=0; k<2; k++) {
c3 = tmp[2][k];
for (int l=0; l<2; l++) {
c4 = tmp[3][l];
scores[c1 + c2 + c3 + c4].push_back(score);
}
}
}
}
}
vector<int> solution(vector<string> info, vector<string> query) {
vector<int> answer;
vector<vector<string>> tmp(4, vector<string>(2, "-"));
for (int i=0; i<info.size(); i++) {
string s;
int idx = 0, score = 0;
stringstream ss(info[i]);
while (ss >> s) {
if (idx < 4) tmp[idx++][0] = s;
else score = stoi(s);
}
storeScore(tmp, score);
}
// 코딩테스트 점수 오름차순 정렬
for (auto it: scores) {
sort(scores[it.first].begin(), scores[it.first].end());
}
for (string q: query) {
string s, key = "";
int idx = 0, score = 0;
stringstream ss(q);
while (ss >> s) {
if (s == "and") continue;
if (idx < 4) {
key += s;
idx++;
} else {
score = stoi(s);
}
}
auto it = lower_bound(scores[key].begin(), scores[key].end(), score);
answer.push_back(scores[key].size() - (it - scores[key].begin()));
}
return answer;
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 비밀지도 C++ (Lv.1) (0) | 2023.05.15 |
---|---|
[프로그래머스] 메뉴 리뉴얼 C++ (Lv.2) (0) | 2023.05.11 |
[프로그래머스] 크레인 인형뽑기 게임 C++ (Lv.1) (0) | 2023.05.01 |
[프로그래머스] 키패드 누르기 C++ (Lv.1) (0) | 2023.05.01 |
[프로그래머스] 주차 요금 계산 C++ (Lv.2) (0) | 2023.04.30 |