1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/84325
2. 풀이
<languages, preference>로 map을 만든다.
Table을 하나하나 읽으면서 빈칸을 기준으로 string을 파싱 하고 map을 조회해 선호도 점수를 얻으며 직종 별 점수를 계산한다.
계산이 끝나면 최대 점수를 업데이트 하고 이때 직종도 같이 업데이트해 준다.
(점수가 같을 시 사전순으로 앞에 있는 것을 출력하기 위해 처음에 table을 정렬해 준다)
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map<string,int> myMap;
//table 직업군 언어 점수를 정리한 문자열 배열
//languages 개발자가 사용하는 언어를 담은 문자열 배열
//preference 언어 선호도를 담은 정수 배열
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
sort(table.begin(),table.end());
myMap.clear();
for(int i = 0 ; i < languages.size();i++)
myMap.insert({languages[i], preference[i]});
string ans = "";
int maxScore = -1;
for(string ele: table){
//하나의 직종에 대한 점수(currentScore) 계산
int blankCnt = 0;
string tmpStr = "";
int currentScore = 0;
string currentJob;
for(char c: ele){
if(c == ' '){
if(blankCnt == 0)
currentJob = tmpStr;
else{
if(myMap.find(tmpStr) != myMap.end())
currentScore += (6 - blankCnt) * myMap[tmpStr];
}
tmpStr = "";
blankCnt++;
}
else{ //c가 빈칸이 아닐 때
tmpStr.push_back(c);
}
}
currentScore += (6 - blankCnt) * myMap[tmpStr];
if(maxScore < currentScore){
maxScore = currentScore;
ans = currentJob;
}
}
//[개발자가 사용하는 언어의 언어 선호도 x 직업군 언어 점수의 총합]이 가장 높은 직업군을 return
return ans;
}
'algorithm > programmers' 카테고리의 다른 글
프로그래머스 위클리 챌린지10주차 교점에 별 만들기 (0) | 2021.10.13 |
---|---|
프로그래머스 위클리 챌린지9주차 전력망을 둘로 나누기 (0) | 2021.10.06 |
2021 카카오 채용연계형 인턴십표 편집 (0) | 2021.09.30 |
2021 카카오 채용연계형 인턴십 > 거리두기 확인하기 (0) | 2021.09.29 |
2021 카카오 채용연계형 인턴십 > 숫자 문자열과 영단어 (0) | 2021.09.28 |
댓글