본문 바로가기
알고리즘/프로그래머스

알고리즘(C++) / 프로그래머스 위클리 챌린지 : 4주차 직업군 추천하기

by clean_h 2021. 8. 31.
728x90

위클리 챌린지 : 4주차 직업군 추천하기

https://programmers.co.kr/learn/courses/30/lessons/84325?language=cpp 

 

코딩테스트 연습 - 4주차

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

programmers.co.kr

 

코드

//프로그래머스 직업군 추천하기 위클리 챌린지 4주차
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <sstream>

using namespace std;

string solution(vector<string> table, vector<string> languages, vector<int> preference) {
    string answer = "";
    
    map <string, int> prefer;
    for (int i = 0; i < languages.size(); i++) {
        prefer[languages[i]] = preference[i];
    } //선호도 

    int max_pre = 0; //최대
    for (int i = 0; i < table.size(); i++) {
        stringstream s(table[i]);
        string job;
        s >> job; //직군
        int pre = 0;
        for (int i = 5; i > 0; i--) {
            string lang;
            s >> lang;
            pre += (i * prefer[lang]); //언어 선호도
        }
        if (max_pre < pre) {
            max_pre = pre;
            answer = job;
        } // 가장 큰 선호도
        else if (max_pre == pre) {
            if (answer > job)
                answer = job;
        } // 같을 때 사전순
    }

    return answer;
}

int main() {
    vector <string> table = { "SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", "PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP", "GAME C++ C# JAVASCRIPT C JAVA" };
    vector <string> languages = { "JAVA", "JAVASCRIPT" };
    vector <int> preference = { 7,5 };
    cout << solution(table, languages, preference) << "\n";
    return 0;
}

 

설명

map에 언어의 선호도를 쌍으로 나타낸다. 

선호도가 존재한다면 점수를 곱하여 점수 총합을 구한다.

점수 총합이 가장 높고 사전 순으로 먼저 오는 직군을 출력한다. 

 

결과

걸린시간 : 30분

map, stringstream 등 STL을 사용하여 문제를 쉽게 풀 수 있었다. 

 

 

 

728x90

댓글