Algorithm/Programmers
[Programmers] 위클리 챌린지 4 직업군 추천하기
멍분이
2021. 8. 24. 19:21
안녕하세요. 이번 포스팅에서는 프로그래머스 위클리 챌린지 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;
}
*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.