#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <sstream>
#include <iostream>
using namespace std;
bool sortSolve(pair<int, string> a, pair<int, string> b);
void saveTable(const vector<string>& table, vector<pair<int, string>>& tableSum,
vector<map<string, int>>& tablePoint); //테이블 점수들을 저장
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
string answer = "";
vector<pair<int, string>> tableSum; //직업군 저장과
vector<map<string, int>> tablePoint; //직업군별 포인트 저장
saveTable(table, tableSum, tablePoint);
for (int i = 0; i < tablePoint.size(); i++)
{
for (int j = 0; j < languages.size(); j++)
tableSum[i].first += tablePoint[i][languages[j]] * preference[j];
}
sort(tableSum.begin(), tableSum.end(), sortSolve);
answer = tableSum[0].second;
return answer;
}
bool sortSolve(pair<int, string> a, pair<int, string> b)
{
if (a.first == b.first)
return a.second < b.second;
return a.first > b.first;
}
void saveTable(const vector<string>& table, vector<pair<int, string>>& tableSum,
vector<map<string, int>>& tablePoint)
{
for (int i = 0; i < table.size(); i++)
{
string name = ""; //직업군을 저장했나
string temp = ""; //이름들의 임시저장
map<string, int> mtemp; //테이블 포인트 임시저장
int point = 5; //점수
istringstream ss(table[i]);
while (getline(ss, temp, ' '))
{
if (name == "")
name = temp;
else
mtemp.insert({ temp, point-- });
}
tableSum.push_back({ 0, name });
tablePoint.push_back(mtemp); //테이블 포인트저장
}//for(int i = 0; i < table.size(); i++)
}
풀이
1. 테이블 안에 있는 직업군과 언어점수를 나눠준다.
2. 그 안의 언어점수들을 사용 선호도 언어들과 곱하고 해당 직업군에 있는 것들을 다 더해준다.
3. 가장 점수가 높은 것을 채택하고 점수가 같다면 알파벳순으로 채택한다. 정렬으로 정렬해서 첫번째를 뽑는다.
- string을 이용하여 일정 단위로 한 문장내에서 단어를 뽑을 때에는 웬만해서 istringstream을 사용해서 뽑아내는 편이 좋은듯하다.
- 빈칸단위로 따로 해결하려했으나 4번문제만 해결이 안 되어서 저것을 쓰니 바로 해결되었다.
https://programmers.co.kr/learn/courses/30/lessons/84325#
'Algorithm > Programmers' 카테고리의 다른 글
[C++] 프로그래머스 위클리챌린지 6주차 복서정렬하기 (0) | 2021.09.24 |
---|---|
[C++] 프로그래머스 위클리챌린지 5주차 모음사전 (0) | 2021.09.24 |
[C++] 프로그래머스 위클리챌린지 3주차 퍼즐조각채우기 (0) | 2021.09.23 |
[C++] 프로그래머스 실패율 (0) | 2021.09.23 |
[C++] 프로그래머스 위클리챌린지 2주차 상호평가 (0) | 2021.09.17 |