https://school.programmers.co.kr/learn/courses/30/lessons/118666
이 문제는 배열 탐색을 통해 해결할 수 있다.
성격 지표는 1번 지표부터 4번 지표까지 정해져 있다.
따라서 table 배열에 지표 순서대로 저장을 한다.
이후 survey 배열와 choices 배열을 순회한다.
choices 배열의 요소는 4점을 기준으로 survey 배열에 존재하는 문자열의 0번요소인지 1번 요소인지 정해진다.
또한 4점보다 작은 경우 점수는 4 - score가 되고, 큰 경우 score - 4가 된다.
점수를 정해진 성격 유형에 맞게 올리면 된다.
이후 지표 중 가장 큰 점수를 answer에 채우면 된다.
이때 같은 경우는 사전 순서 중 가장 먼저 나오는 문자를 채우면 된다.
#include <string>
#include <vector>
using namespace std;
vector<vector<pair<char,int>>> table = {{{'R',0},{'T',0}},{{'C',0},{'F',0}},{{'J',0},{'M',0}},{{'A',0},{'N',0}}};
string solution(vector<string> survey, vector<int> choices) {
string answer = "";
for(int i = 0;i<survey.size();i++){
int score = choices[i];
char personal = '-';
if(score<4){
personal = survey[i][0];
score = 4 - score;
}
else if(score == 4){
continue;
}
else{
personal = survey[i][1];
score -= 4;
}
if(personal != '-'){
for(int j = 0;j<table.size();j++){
if(table[j][0].first == personal){
table[j][0].second+=score;
}
if(table[j][1].first == personal){
table[j][1].second+=score;
}
}
}
}
for(int i = 0;i<table.size();i++){
int type1 = table[i][0].second;
int type2 = table[i][1].second;
if(type1 > type2){
answer += table[i][0].first;
}
else if(type1 < type2){
answer += table[i][1].first;
}
else{
answer += min(table[i][0].first,table[i][1].first);
}
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 1] 숫자 문자열과 영단어 (0) | 2024.06.07 |
---|---|
[Lv 1] 신고 결과 받기 (0) | 2024.06.07 |
[Lv 1] 숫자 짝꿍 (0) | 2024.06.07 |
[Lv 1] 최소직사각형 (0) | 2024.06.07 |
[Lv 1] 신규 아이디 추천 (0) | 2024.06.04 |