어흥

[프로그래머스] 직업군 추천하기 (C++) 본문

알고리즘/프로그래머스

[프로그래머스] 직업군 추천하기 (C++)

라이언납시오 2021. 8. 31. 20:29
728x90
반응형

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/84325

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr

1. 주의할 점

- 차례대로 완벽하게 구현한다

- 우선순위큐와 Map을 활용한다

 

2. 구현

- Table 벡터에 있는 정보들을 각각 V 벡터와 M[] 맵에 담는다. 맵에 담는 이유는, M[][언어]를 검색했을 때, 보다 빠르게 검색이 되기 때문이다

- 5개의 직업군에 대해 각각의 언어와 선호도를 계산하여 우선순위큐에 넣는다. 이때, 우선순위큐는 총점의 내림차순, 문자열의 사전순으로 정렬한다

#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <sstream>
#include <queue>
#include <algorithm>
using namespace std;
struct info{
    string s;
    int val;
};
struct cmp{
    bool operator()(info &a, info &b){
        if(a.val==b.val) return a.s > b.s;
        return a.val < b.val;
    }
};
map<string,int> m[5];
vector<string> v;

string solution(vector<string> table, vector<string> languages, vector<int> preference) {
    string str,answer = "";
    priority_queue<info,vector<info>,cmp> pq;
    for(int i=0;i<table.size();i++){
        istringstream ss(table[i]);
        int score=6;
        while(getline(ss,str,' ')){
            if(score==6)    v.push_back(str);
            else    m[i][str]=score;
            score--;
        }
    }
    for(int k=0;k<5;k++){
        string job = v[k];
        int score = 0;
        for(int i=0;i<languages.size();i++){
            string ss = languages[i];
            score+=(m[k][ss]*preference[i]);
        }
        pq.push({job,score});
    }
    return answer = pq.top().s;
}
728x90
반응형
Comments