N

(프로그래머스 c++)위클리 챌린지 4주차 본문

프로그래머스 알고리즘/Weekly Challenge

(프로그래머스 c++)위클리 챌린지 4주차

naeunchan 2021. 8. 26. 14:26
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/84325

 

코딩테스트 연습 - 4주차

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

programmers.co.kr

 

맵을 활용한 문제 풀이.

우선 table에 있는 문자열을 모두 토크 나이징 한다.

 

토크 나이징 한 값을 v 벡터에 저장하고, 해당 직군에 따른 언어 점수를 lang 맵에 저장하도록 한다.

5점 ~ 1점 순서로, v 벡터 안에 있는 언어를 key, 점수를 value로 lang에 저장.

lang 맵을 다시 jobs 맵에 저장하는데, key는 v[0]에 해당하는 직군, value는 lang으로 지정한다.

 

토크 나이징이 끝나면 이제 가장 높은 점수를 찾으면 된다.

jobs 맵을 순회 하면서 개발자의 언어에 따른 점수를 구하여 최댓값을 찾는다.

최댓값이 갱신될 때마다 정답 직군도 함께 갱신해준다.

#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <map>

using namespace std;

string solution(vector<string> table, vector<string> languages, vector<int> preference) {
    string answer = "";
    map<string, map<string, int>> jobs;
    int max = 0;
        
    for(int i = 0; i < 5; i++){
        string token;
        string job;
        stringstream ss(table[i]);
        vector<string> v;
        map<string, int> lang;
        
        while(ss >> token){
            v.push_back(token);
        }
        
        job = v[0];
        
        for(int j = 1; j < 6; j++){
            lang[v[j]] = 6 - j;
        }
        
        jobs[job] = lang;
    }
    
    for(auto itr = jobs.begin(); itr != jobs.end(); itr++){
        string job = itr->first;
        int score = 0;
        
        for(int i = 0; i < languages.size(); i++){
            score += itr->second[languages[i]] * preference[i];
        }
        
        if(max < score){
            max = score;
            answer = job;
        }
    }
    
    return answer;
}
728x90
반응형