문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/84325
문제 풀이
주어지는 table 벡터는 ["SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", ... ]과 같이 주어진다.
이를 편리하게 사용하기 위해서 string vector인 langs vector를 만들고 istreamstream을 통해서 띄어쓰기로 구분된 문자열을 입력할 수 있다.
예를 들어, table[0]에는 "SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++"가 있을 것이다. 이를 space로 구분하여 어느 string vector에 넣고 싶다면
istreamstream iss(table[0]);
while(iss >> tmp){
langs.push_back(tmp);
}
와 같이 사용할 수 있다.
다음으로, languages vector와 preference vector도 편의성을 위해 pair로 묶어 pair vector인 p에 넣어준다.그렇다면 p벡터의 first들은 개발자가 사용하는 언어들이 모여있을 것이고, second에는 선호도가 담겨있을 것이다.
이제 table에 담겨있는 직군별 언어 점수를 선호도와 곱한 뒤, total에 계속해서 더해준다. 그 다음 ans 벡터에 해당 직군과 총점을 넣어준 뒤 정렬한다. 정렬할 때에는 점수가 가장 높은 것이 맨 처음으로 오게 하고, 같은 점수에서는 사전 순으로 가장 빠른 것이 맨 처음으로 오게 해서 추천 직군을 answer에 넣을 수 있도록 한다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
bool cmp(pair<string, int> a, pair<string, int> b){
if(a.second > b.second){
return true;
}
else if(a.second == b.second){
return a.first < b.first;
}
else return false;
}
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
string answer = "";
vector<pair<string, int> > p;
vector<pair<string, int> > ans;
for(int i=0; i<languages.size(); i++){
p.push_back(make_pair(languages[i], preference[i]));
}
for(int i=0; i<table.size(); i++){
vector<string> langs;
string tmp;
int total = 0;
istringstream iss(table[i]);
while(iss >> tmp){
langs.push_back(tmp);
}
for(int j=1; j<langs.size(); j++){
for(int k=0; k<p.size(); k++){
if(p[k].first == langs[j]){
total += p[k].second * (6-j);
}
}
}
ans.push_back(make_pair(langs[0], total));
}
sort(ans.begin(), ans.end(), cmp);
answer = ans[0].first;
return answer;
}
'Programming Solve > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 나머지가 1이 되는 수 찾기 / C++ (0) | 2021.10.17 |
---|---|
프로그래머스 - 위클리 챌린지 8주차, 최소직사각형 / C++ (0) | 2021.10.05 |
프로그래머스 - 위클리 챌린지 1주차, 부족한 금액 계산하기 / C++ (0) | 2021.09.07 |
프로그래머스 - K번째 수 / C++ (0) | 2021.08.16 |
프로그래머스 - 숫자 문자열과 영단어 / C++ (0) | 2021.08.07 |