본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기

by 오오오니 2023. 9. 21.

문제

성격유형을 반환하는 문제이다

매우 비동의 ~ 매우 동의 까지 1~7 점수로 주어지는데 
1 2 3 4 5 6 7 8 -> 3 2 1 0 1 2 3 으로 반환해서 계산해주어야한다.
같은 지표라도 동의와 비동의는 달라질 수 있다. 동의 : R , 비동의 T <-> 동의 : T , 비동의 : R 
-> 입력 순서에 따라 판단한다.

풀이

for 문을 돌면서 각 질문에 대해 답을 가지고 성격 유형에 점수를 더한다. 1~7로 점수가 주어지기 때문에 점수를 반환해서 더한다. 동의, 비동의 순서가 질문마다 다르게 주어질 수 있기 때문에 "abc[survey[i][0]-'A']" 이런식으로 해당하는 알파벳에 더한다.

각 자리마다 더 많이 나온 성격유형을 선택한다. 똑같으면 사전순으로 한다. 출력한다.

#include <string>
#include <vector>

using namespace std;

// 3210123
//비동의, 동의
//123  앞에 점수 ,456이면 뒤에 점수
//map  char 
int abc[26];

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    for(int i=0;i<survey.size();i++){
        if(choices[i]<4)
            abc[survey[i][0]-'A']+= 4 - choices[i];
        else if(choices[i]>4)
            abc[survey[i][1]-'A']+=choices[i]-4;
                    
    }
    if(abc['R'-'A']>=abc['T'-'A'])
        answer+='R';
    else
        answer+='T';
    
    if(abc['C'-'A']>=abc['F'-'A'])
        answer+='C';
    else
        answer+='F';
    
    if(abc['J'-'A']>=abc['M'-'A'])
        answer+='J';
    else
        answer+='M';
    
    if(abc['A'-'A']>=abc['N'-'A'])
        answer+='A';
    else
        answer+='N';
    
    return answer;
}