본문 바로가기
코딩테스트 공부/Programmers

[C++] 위클리챌린지 4주차 직업군 추천하기 84325

by 메정 2021. 8. 23.

📌[직업군 추천하기](https://programmers.co.kr/learn/courses/30/lessons/84325?language=cpp)

/* 해당 문제 설명은 링크로 대체한다. */  

📌풀이

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"] 이런 식으로 담겨있다.

그러므로 행 별(SI, CONTENTS, ...)로 진행을 직군에 따라 languages에 포함된 언어가 선호도(preference)에 따라 얼마인지를 score에 계산하여 저장해준 다음 헤더의 sort() 함수로 내림차순 정렬을 해주었다.

주의할 점은! 기본 각 직군별 언어 총합 점수가 높은 것을 return 하되, 같은 경우 사전 순으로 정렬해줘야 하는 점이다!

📌코드

#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <map>
#include <algorithm>
using namespace std;

bool cmp(pair<string, int> a, pair<string, int> b){
    if(a.second == b.second) return a.first < b.first; //각 언어별 점수가 같을 경우, 사전순
    else return a.second > b.second; //각 언어별 점수 순
}

string solution(vector<string> table, vector<string> languages, vector<int> preference) {
    vector<pair<string, int>> jobsScores; //first : 직업군, second : 총 점수

    for(int str = 0; str < table.size(); str++){
        map<string, int> info; //first : 직업군, second : 각 점수
        int num = 5; //5로 초기화
        int cnt = 0; //직업군만 저장하기 위한 카운트 값
        string nowJobs = "";

        //행 별로 공백을 기준으로 값 보관
        istringstream ss(table[str]);
        string buffer;
        while(getline(ss, buffer, ' ')){
            if(cnt == 0){
                nowJobs = buffer; //현재 행의 job이 뭔지 보관
                cnt++;
            }
            else
                info.insert({buffer, num--});
        }

        int score = 0;
        //language 별로 값 계산
        for(int i = 0; i < languages.size(); i++){
            for(auto s : info){
                if(s.first == languages[i]){
                    score += (preference[i] * s.second);
                }
            }
        }
        jobsScores.push_back({nowJobs, score}); //현재 잡의 언어별 총 값 보관
    }

    sort(jobsScores.begin(), jobsScores.end(), cmp); //점수를 기준으로 내림차순 정렬

    return jobsScores[0].first;
}
}     

회고

위클리 3주차 문제를 아직 못풀었다. 아무래도 3주차가 너무 어려워서 푼 사람이 적어서 그런지 4주차는 난이도가 조정된 것 같다 ㅎㅎ....
이런 문제면 .... 너무 좋지 ... 풀만했다 .....
문제는 어렵지 않았지만 점수는 1점 받았다. info map을 사용한 점이 문제인가 ... !!!!!! 이유를 알겠다면 .. 댓글로 남겨주시면 감사할 것 같다.. ㅎㅎ....

댓글