개발자가 사용하는 언어와 언어 선호도
를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수
를 부여한 표입니다.
점수 | SI | CONTENTS | HARDWARE | PORTAL | GAME |
---|---|---|---|---|---|
5 | JAVA | JAVASCRIPT | C | JAVA | C++ |
4 | JAVASCRIPT | JAVA | C++ | JAVASCRIPT | C# |
3 | SQL | PYTHON | PYTHON | PYTHON | JAVASCRIPT |
2 | PYTHON | SQL | JAVA | KOTLIN | C |
1 | C# | C++ | JAVASCRIPT | PHP | JAVA |
예를 들면, SQL의 SI 직업군 언어 점수
는 3점이지만 CONTENTS 직업군 언어 점수
는 2점입니다. SQL의 HARDWARE, PORTAL, GAME 직업군 언어 점수
는 0점입니다.
직업군 언어 점수
를 정리한 문자열 배열 table
, 개발자가 사용하는 언어를 담은 문자열 배열 languages
, 언어 선호도를 담은 정수 배열 preference
가 매개변수로 주어집니다. 개발자가 사용하는 언어의 언어 선호도
x 직업군 언어 점수
의 총합이 가장 높은 직업군을 return 하도록 solution 함수를 완성해주세요. 총합이 같은 직업군이 여러 개일 경우, 이름이 사전 순으로 가장 빠른 직업군을 return 해주세요.
구현
문제table
을 미리 사전 순으로 정렬해주었다.getWord
함수를 만들어 사용하였다.string getWord(string s, int &index) {
string word = "";
while (true) {
if (index >= s.size() || s[index] == ' ') break;
word += s[index++];
}
return word;
}
string
배열인 table
을 2차원 배열로 바꾸어 주었다.languages
배열을 돌며 언어 선호도
x 직업군 언어 점수
를 계산해서 계속 더해준다.table
을 정렬하였기 때문에 가장 먼저 나오는 최댓값을 리턴하면 된다.null
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string getWord(string s, int &index) {
string word = "";
while (true) {
if (index >= s.size() || s[index] == ' ') break;
word += s[index++];
}
return word;
}
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
string answer = "";
sort(table.begin(), table.end());
vector<vector<string>> score(table.size());
for (int i = 0; i < table.size(); ++i) {
int index = 0;
string temp = getWord(table[i], index);
index++;
while (index < table[i].size()) {
temp = getWord(table[i], index);
index++;
score[i].push_back(temp);
}
}
vector<int> result(table.size(), 0);
for (int i = 0; i < languages.size(); ++i) {
for (int j = 0; j < score.size(); ++j) {
for (int k = 0; k < score[j].size(); ++k) {
if (score[j][k] == languages[i]) {
result[j] += (5 - k) * preference[i];
}
}
}
}
int maxValue = 0;
for (int i = 0; i < result.size(); ++i) {
maxValue = max(maxValue, result[i]);
}
for (int i = 0; i < result.size(); ++i) {
if (result[i] == maxValue) {
int index = 0;
answer = getWord(table[i], index);
break;
}
}
return answer;
}