반응형
https://programmers.co.kr/learn/courses/30/lessons/84325
자료구조를 사용해보는 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
각 직군별 언어와 점수가 저장된 table, 질의를 하는 언어가 담긴 languages, 해당 언어의 선호도가 저장된 preference를 solution함수의 parameter로 받습니다.
📔 풀이과정
1. table의 직군별 언어들과 그 언어의 점수를 map변수 tableMap에 저장합니다. split은 c++에서 지원하지 않기 때문에 따로 구현했습니다. delimiter(구분자)와 문자열 input을 인자로 받아 매 구분자마다 문자열을 나누어 vector<string>형태로 반환해주는 함수입니다.
2. 직업별 점수를 저장할 map변수 scoreMap을 선언합니다. 만들어진 tableMap을 토대로 점수를 산정해 직군(job)을 key, 그 직군의 총 점수를 value로 해 저장합니다. 동시에 가장 높은 점수의 score는 maxScore에 저장합니다.
3. 만들어진 scoreMap을 순회하며 maxScore와 같은 scoreMap.second를 찾고 찾았다면 바로 scoreMap.first(직군)을 반환해줍니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
vector <string> split(string input, char delimiter){
vector <string> result;
stringstream ss(input);
string tmp;
while(getline(ss,tmp,delimiter)) result.push_back(tmp);
return result;
}
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
string answer = "";
map<string, map<string,int>> tableMap;
for(auto t : table){
vector <string> jobAndLanguage = split(t ,' ');
string job = jobAndLanguage[0];
map<string,int> tmpMap;
for(int i = 1; i < jobAndLanguage.size(); i++){
string language = jobAndLanguage[i];
int score = 5 - i + 1;
tmpMap[language] = score;
}
tableMap[job] = tmpMap;
}
map<string,int> scoreMap;
int maxScore = 0;
for(auto tm: tableMap){
int score = 0;
string job = tm.first;
map<string,int> scorePerLanguage = tm.second;
for(int i = 0; i < languages.size(); i++){
score += preference[i] * scorePerLanguage[languages[i]];
}
maxScore = max(maxScore,score);
scoreMap[job] = score;
}
for(auto el : scoreMap){
if(el.second == maxScore) return el.first;
}
}
'Algorithm > 자료구조' 카테고리의 다른 글
(C++) - 백준(BOJ) 5766번 : 할아버지는 유명해! (0) | 2021.09.30 |
---|---|
(C++) - 백준(BOJ) 2075번 : N번째 큰 수 (0) | 2021.09.01 |
(C++) - 백준(BOJ) 2204번 : 도비의 난독증 테스트 (0) | 2021.08.22 |
(C++) - 백준(BOJ) 10546번 : 배부른 마라토너 (0) | 2021.08.14 |
(C++) - 백준(BOJ) 1811번 : 카드 놓기 (0) | 2021.08.03 |