티스토리 뷰

성공 코드(내 코드)

  • survey를 탐색하며
    • choices가 3이하인 경우에는
      • survey의 첫번째 문자에 해당되는 인덱스를 찾아 벡터 st의 원소에 점수를 추가
    • choices가 5이상인 경우에는
      • survey의 두번째 문자에 해당되는 인덱스를 찾아 벡터 st의 원소에 점수를 추가
  • st를 탐색하며
    • i=0, 2, 4, 6인 경우
      • st[i]과 st[i+1] 중 큰 값을 가지는 원소가 나타내는 문자를 벡터 type를 통해 찾아 answer에 추가한다.
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    vector<int> st(8);
    vector<char> type(8);
    type[0]='R'; type[1]='T';
    type[2]='C'; type[3]='F';
    type[4]='J'; type[5]='M';
    type[6]='A'; type[7]='N';
    
    for(int i=0; i<survey.size(); i++){
        string s=survey[i];
        int c=choices[i], idx;
        if(c<=3){
            idx=find(type.begin(), type.end(), s[0])-type.begin();
            st[idx]+=4-c;
        } else if(c>=5){
            idx=find(type.begin(), type.end(), s[1])-type.begin();
            st[idx]+=c-4;
        }
    }
    for(int i=0; i<=6; i+=2){
        if(st[i]>st[i+1]){
            answer+=type[i];
        } else if(st[i]<st[i+1]){
            answer+=type[i+1];
        } else{
            answer+=type[i];
        }
    }
    
    return answer;
}

 


다른 사람 풀이

  • 위의 방법과 비슷하나
    • 벡터 st를 map인 score로
    • 벡터 type을 2차원 벡터인 MBTI로 나타냈다.
// 06:50 ~
#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;
}