알고리듬/문제
[programmers] 성격 유형 검사하기
narmeee
2023. 5. 8. 23:08
문제 설명
나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.
지표 번호성격 유형
1번 지표 | 라이언형(R), 튜브형(T) |
2번 지표 | 콘형(C), 프로도형(F) |
3번 지표 | 제이지형(J), 무지형(M) |
4번 지표 | 어피치형(A), 네오형(N) |
4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
각 질문은 1가지 지표로 성격 유형 점수를 판단합니다.
선택지성격 유형 점수
매우 비동의 | 네오형 3점 |
비동의 | 네오형 2점 |
약간 비동의 | 네오형 1점 |
모르겠음 | 어떤 성격 유형도 점수를 얻지 않습니다 |
약간 동의 | 어피치형 1점 |
동의 | 어피치형 2점 |
매우 동의 | 어피치형 3점 |
제한사항
- 1 ≤ survey의 길이 ( = n) ≤ 1,000
- survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나입니다.
- survey[i]의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
- survey[i]의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
- choices의 길이 = survey의 길이
- choices[i]는 검사자가 선택한 i+1번째 질문의 선택지를 의미합니다.
- 1 ≤ choices의 원소 ≤ 7
풀이
구현 문제, 입력 받은 설문과 결과에 따라 해당 유형 점수를 올려주고 지표마다 큰 유형을 선택해준다.
#include <string>
#include <vector>
#include <map>
using namespace std;
/*
1번 지표 라이언형(R), 튜브형(T)
2번 지표 콘형(C), 프로도형(F)
3번 지표 제이지형(J), 무지형(M)
4번 지표 어피치형(A), 네오형(N)
비동의/동의
ex) ["AN", "CF", "MJ", "RT", "NA"] [5, 3, 2, 7, 5] "TCMA"
ex) ["TR", "RT", "TR"] [7, 1, 3] "RCJA"
*/
string solution(vector<string> survey, vector<int> choices) {
char type[8] = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
string answer = "";
map<char, int> score;
for(auto t : type){
score[t] = 0;
}
for(int i = 0; i < survey.size(); i++){
if(choices[i] > 4){
score[survey[i][1]] += choices[i] - 4;
}else if(choices[i] < 4){
score[survey[i][0]] += 4 - choices[i];
}
}
for(int i = 0; i < 4; i++){
if(score[type[i*2]] == score[type[i*2+1]]){
if(type[i*2] - type[i*2+1] > 0)answer+=type[i*2+1];
else answer+=type[i*2];
}else{
answer += score[type[i*2]] < score[type[i*2+1]] ? type[i*2+1] : type[i*2];
}
}
return answer;
}