📌[직업군 추천하기](https://programmers.co.kr/learn/courses/30/lessons/84325?language=cpp)
/* 해당 문제 설명은 링크로 대체한다. */
📌풀이
table이
["SI JAVA JAVASCRIPT SQL PYTHON C#",
"CONTENTS JAVASCRIPT JAVA PYTHON SQL C++",
"HARDWARE C C++ PYTHON JAVA JAVASCRIPT",
"PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP",
"GAME C++ C# JAVASCRIPT C JAVA"] 이런 식으로 담겨있다.
그러므로 행 별(SI, CONTENTS, ...)로 진행을 직군에 따라 languages에 포함된 언어가 선호도(preference)에 따라 얼마인지를 score에 계산하여 저장해준 다음 헤더의 sort() 함수로 내림차순 정렬을 해주었다.
주의할 점은! 기본 각 직군별 언어 총합 점수가 높은 것을 return 하되, 같은 경우 사전 순으로 정렬해줘야 하는 점이다!
📌코드
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <map>
#include <algorithm>
using namespace std;
bool cmp(pair<string, int> a, pair<string, int> b){
if(a.second == b.second) return a.first < b.first; //각 언어별 점수가 같을 경우, 사전순
else return a.second > b.second; //각 언어별 점수 순
}
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
vector<pair<string, int>> jobsScores; //first : 직업군, second : 총 점수
for(int str = 0; str < table.size(); str++){
map<string, int> info; //first : 직업군, second : 각 점수
int num = 5; //5로 초기화
int cnt = 0; //직업군만 저장하기 위한 카운트 값
string nowJobs = "";
//행 별로 공백을 기준으로 값 보관
istringstream ss(table[str]);
string buffer;
while(getline(ss, buffer, ' ')){
if(cnt == 0){
nowJobs = buffer; //현재 행의 job이 뭔지 보관
cnt++;
}
else
info.insert({buffer, num--});
}
int score = 0;
//language 별로 값 계산
for(int i = 0; i < languages.size(); i++){
for(auto s : info){
if(s.first == languages[i]){
score += (preference[i] * s.second);
}
}
}
jobsScores.push_back({nowJobs, score}); //현재 잡의 언어별 총 값 보관
}
sort(jobsScores.begin(), jobsScores.end(), cmp); //점수를 기준으로 내림차순 정렬
return jobsScores[0].first;
}
}
회고
위클리 3주차 문제를 아직 못풀었다. 아무래도 3주차가 너무 어려워서 푼 사람이 적어서 그런지 4주차는 난이도가 조정된 것 같다 ㅎㅎ....
이런 문제면 .... 너무 좋지 ... 풀만했다 .....
문제는 어렵지 않았지만 점수는 1점 받았다. info map을 사용한 점이 문제인가 ... !!!!!! 이유를 알겠다면 .. 댓글로 남겨주시면 감사할 것 같다.. ㅎㅎ....
'코딩테스트 공부 > Programmers' 카테고리의 다른 글
[C++] 5주차 위클리문제 사전모음 84512 (0) | 2021.08.31 |
---|---|
[C++] level2 단체사진 찍기 1835 (0) | 2021.08.24 |
[C++] level2 땅따먹기 12913 (0) | 2021.08.22 |
[C++] level2 삼각달팽이 68645 (0) | 2021.08.22 |
[C++] level2 후보키 42890 (0) | 2021.08.22 |
댓글