본문 바로가기

Algorithm/Programmers

[Programmers] 위클리 챌린지 4 직업군 추천하기

안녕하세요. 이번 포스팅에서는 프로그래머스 위클리 챌린지 4 직업군 추천하기 문제를 풀어보겠습니다.

 

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

 

코딩테스트 연습 - 4주차

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

programmers.co.kr

 

위 링크에서 한번 도전해보시고 오시면 좋을 것 같습니다.

 

 

일단 이 문제는 문자열 + 구현 문제입니다. 큰 고민 없이 문제의 요구사항을 코드로 적어주시면 됩니다.

 

저의 경우는 우선 처음 table을 각각 

SI, A, B, C, D, E ...

...

GAME, A, B, C, D, E...

 

이런 식으로 파싱을 먼저 한 뒤,  

각각 입력값으로 주어진 language의 score를 preference와 함께 곱해준 다음 score라는 배열에 저장해두었습니다.

 

다시 score라는 배열을 순회하며 최댓값과 최댓값일 때 문자열을 저장해주었습니다.

* 최댓값이 같을 때 사전 순으로 먼저 오는 것을 고르라고 하였기 때문에 같다면 min 연산을 취해주시면 됩니다.

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;
string parsingTable[10][12];
int score[10][12];

void parsing(int n, string cur) {
    string tmp = "";
    int idx=0;
    for(int i = 0; i < cur.size(); i++) {
        if(cur[i] != ' ') tmp+=cur[i];
        else {
            parsingTable[n][idx++] = tmp;
            tmp = "";
        }
    }
    parsingTable[n][idx] = tmp;
}
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
    string answer = "";

    for(int i =0; i < table. size(); i++) parsing(i, table[i]);
    for(int i = 0; i < table.size(); i++) {
        string part = parsingTable[i][0];
        for(int s = 0; s < languages.size(); s++) {
            for(int j = 1; j <= 5; j++) {
                if(parsingTable[i][j] == languages[s]) {
                    score[i][s] += (6-j) * preference[s];    
                }
            }
        }
    }

    string maxPart = ""; int maxScore = 0;
    for(int i = 0; i < table.size(); i++) {
        int totalScore = 0;
        for(int s = 0; s < languages.size(); s++) {
            totalScore += score[i][s];
        }
        if(totalScore > maxScore) {
            maxScore = totalScore; maxPart = parsingTable[i][0];
        } else if(totalScore == maxScore) {
            if(maxPart == "") maxPart = parsingTable[i][0];
            else maxPart = (maxPart < parsingTable[i][0])? maxPart : parsingTable[i][0];
        }
    }
    answer = maxPart;
    return answer;
}

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.