코딩테스트 연습 - 4주차 | 프로그래머스 (programmers.co.kr)
1. 문제 설명
첫번째 매개변수로 배열로 각 직업군 마다의 언어점수가 주어진다.
[
"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"
]
주어진 순서대로 5, 4, 3, 2, 1, 점이다.
그지같은건 각 항목이 문자열로 주어진다는 것...
두번째 매개변수로 개발자가 사용하는 언어들 배열이 주어진다.
["PYTHON", "C++", "SQL"]
세번째 매개변수로 두번째 매개변수의 언어들의 순서대로 선호도가 주어진다.
[7, 5, 5]
문제, 언어선호도*직업군 언어 점수의 총합이 가장 높은 직업군을 리턴해야함
여러개일 경우, 이름을 사전순으로 ..
2. 풀이방법
문제 자체는 어려운게 아닌데 구현이 힘들었다.
먼저, table이 문자열 배열로 들어오기 때문에 저걸 처리하기 위해
공백을 기준으로 문자열을 잘라 저장하는 과정이 필요하다.
과정 >> [C++] 문자열 자르기, 자른 문자열 배열에 담기(strtok이용) (tistory.com)
그래서 s1에다가 각 항목을 저장했다.
예를 들어, i=0일 때는
s1 = [ "SI", "JAVA", "JAVASCRIPT" , "SQL", "PYTHON", "C#" ] 이렇게 저장되는 것이다.
점수를 저장할 배열이 필요했는데, 답은 문자열로 출력해야 해서 pair을 선언해
첫번째에는 점수, 두번째에는 직업군이름을 저장했다.
그래서 s1[0] 에는 직업군이름이 있으므로, j=0일 때, pair의 second에 저장해준다.
(j는 s1[i]의 크기-1)
그리고 language의 크기 만큼, s1[i]의 각 항목과 비교하여 일치하는 것이 있으면,선호도와 (6-j)를 곱하면 점수가 된다. 일치하는 게 있으면 곱해서 더해줌.왜 6-j 냐면, 만약 j가 1일때는 JAVA인데, JAVA의 언어점수는 5점이다.따라서 6-j = 5이므로 계산이 위와 같이 되는 것이다.
그렇게 pair p에 총점수와, 이름을 저장했으면 정렬하는 것이 필요하다.근데 점수가 동일하면 사전순으로 빠른 것을 리턴하라고 했으므로비교함수를 만들어서 값을 리턴하도록 했다.
<정답 코드>
#include <string>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
pair<int, string> p[5];
bool compare(const pair<int, string>& a, const pair<int, string>& b) {
if (a.first == b.first)
return a.second > b.second;
return a.first < b.first;
}
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
string answer = "";
for (int i = 0; i < 5; i++) {
char s1[10][200];
strcpy(s1[i], table[i].c_str());
char* ptr = strtok(s1[i], " ");
int j = 0;
while (ptr != NULL) {
strcpy(s1[j], ptr);
if(j==0) p[i].second = s1[j];
for (int k = 0; k < languages.size(); k++) {
if (languages[k] == s1[j]) {
p[i].first += preference[k] * (6 - j);
}
}
ptr = strtok(NULL, " ");
j++;
}
// cout << p[i].first << " ";
}
sort(p, p + 5, compare);
answer = p[4].second;
return answer;
}
'Algorithm > Solution' 카테고리의 다른 글
[백준] 11140번 - LOL(C++) (0) | 2021.09.28 |
---|---|
[프로그래머스] 문자열 다루기 기본 (0) | 2021.08.26 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.08.25 |
[프로그래머스] 약수의 개수와 덧셈 (0) | 2021.08.16 |
[프로그래머스] 내적 (0) | 2021.08.12 |