#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(vector<string> survey, vector<int> choices) {
string answer = "";
map<char, int> score;
score['R'] = 0;
score['T'] = 0;
score['C'] = 0;
score['F'] = 0;
score['J'] = 0;
score['M'] = 0;
score['A'] = 0;
score['N'] = 0;
for(int i = 0; i < survey.size(); i++){
int sc = abs(choices[i] - 4);
if (choices[i] < 4){
score[survey[i][0]] += sc;
} else {
score[survey[i][1]] += sc;
}
}
if(score['R'] >= score['T']){
answer += "R";
} else {
answer += "T";
}
if(score['C'] >= score['F']){
answer += "C";
} else {
answer += "F";
}
if(score['J'] >= score['M']){
answer += "J";
} else {
answer += "M";
}
if(score['A'] >= score['N']){
answer += "A";
} else {
answer += "N";
}
return answer;
}
map을 사용한 풀이
map<char, int> score로 각 char마다 점수를 카운트하고 점수 비교를 통해 유형을 분류한다.
각 score를 비교하는 부분의 코드가 반복되는 코드인데 4번이나 들어가서 코드가 길어졌다.
또 map에 초기 값을 넣는 부분도 반복되는데 계속 들어가 있다.
#include <string>
#include <vector>
#include <map>
using namespace std;
char MBTI[4][2] = {
{'R','T'},
{'C','F'},
{'J','M'},
{'A','N'}
};
string solution(vector<string> survey, vector<int> choices) {
string ans = "";
map<char,int> score;
for(int i = 0; i < survey.size(); ++i){
if(choices[i] < 4){
score[survey[i][0]] += (4 - choices[i]);
} else{
score[survey[i][1]] += (choices[i] - 4);
}
}
for(int i = 0; i < 4; ++i){
if(score[MBTI[i][0]] >= score[MBTI[i][1]]) ans += MBTI[i][0];
else ans += MBTI[i][1];
}
return ans;
}
for문을 사용해서 반복되는 코드를 줄였다.
여기에서 궁금한 것
if에서 비교할 때 map에 key가 없어도 비교가 되는 것인가?
map에 int값을 넣을 때 0을 먼저 넣지 않고 += 연산을 통해 넣을 수 있는 것인가?
-> 실행이 되는 것을 보면 상관 없는 것 같다.