개발하는 kim-hasa

[c++][프로그래머스] 4주차 본문

Algorithm/Programmers(c++)

[c++][프로그래머스] 4주차

kim-hasa 2021. 8. 26. 16:12

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

 

코딩테스트 연습 - 4주차

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

programmers.co.kr

4주차 입니다.

 

가장 먼저 데이터를 받아와서 공백을 기준으로 나눕니다.

 

그 다음 언어가 있다면, 그 언어의 점수와 선호도를 구해서 바로 더합니다.

 

만약 합계가 이전값보다 큰 경우, 정답에 data[0] 즉 이름을 넣고 가장 큰 값에 합계를 저장합니다.

 

같은 경우, 사전순으로 먼저오는 data[0]을 비교해서 이름에 넣습니다.

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> table, vector<string> languages, vector<int> preference) {
    string answer = "";
    int sum = 0;
    int big = 0;            // 합계를 저장할 변수
    vector<string> data;    // data를 넣을 벡터
    
    for(int i=0; i<table.size(); i++)
    {
        string str1 = table[i];
        string str2 = "";
        
        for(int j = 0; j<str1.length(); j++)
        {
            if(str1[j] == ' ')
            {
                data.push_back(str2);
                str2 = "";  
            }
            else
            {
                str2 += str1[j];
            }
        }
        data.push_back(str2);           // data 분리
        
        for(int k=0; k<languages.size(); k++)
        {
            for(int l=1; l<data.size(); l++)
            {
                if(data[l] == languages[k])
                {
                    sum += (6-l) * preference[k];       // 비교해서 총합 점수를 구함
                    break;
                }
            }
        }
        
        if(big < sum)           // 더 크면 answer 변경
        {
            answer = data[0];
            big = sum;
        }
        else if(big == sum)     // 같다면, 사전에서 먼저오는 것으로 변경
        {
            if(answer > data[0])
                answer = data[0];
        }
        data.clear();
        sum = 0;
    }
    
    return answer;
}