ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 성격 유형 검사하기 c++
    Coding Test/programmers 2022. 8. 19. 17:33
    728x90

    문제 설명

    나만의 카카오 성격 유형 검사지를 만들려고 합니다.
    성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.

    지표 번호 성격 유형
    1번 지표 라이언형(R), 튜브형(T)
    2번 지표 콘형(C), 프로도형(F)
    3번 지표 제이지형(J), 무지형(M)
    4번 지표 어피치형(A), 네오형(N)

    survey 원소에 따라 점수 배치가 달라진다.

    "AN" →

    선택지 성격 유형 점수
    매우 비동의 어피치형 3점
    비동의 어피치형 2점
    약간 비동의 어피치형 1점
    모르겠음 어떤 성격 유형도 점수를 얻지 않습니다
    약간 동의 네오형 1점
    동의 네오형 2점
    매우 동의 네오형 3점

    "NA" 

    선택지 성격 유형 점수
    매우 비동의 네오형 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

    입출력 예

    survey choices result
    ["AN", "CF", "MJ", "RT", "NA"] [5, 3, 2, 7, 5] "TCMA"
    ["TR", "RT", "TR"] [7, 1, 3] "RCJA"

    풀이

    choices score
    1 3
    2 2
    3 1
    4 0
    5 1
    6 2
    7 3

    점수는 choices 4를 기준으로 계산하였다.

     

    지표별 유형의 검사 값이 같으면 사전순이 우선시 되어  유형이 결정됩니다.

    지표의 유형 검사 값이 같으면 아스키값을 비교하여 아스키값이 작은 사전순이 선택되어 저장하도록 구현하였습니다.

    유형 검사 값이 같지 않다면 값을 비교하여 더 큰 값의 유형이 저장됩니다.

    #include <string>
    #include <vector>
    #include <map>
    
    using namespace std;
    
    string solution(vector<string> survey, vector<int> choices) {
      string answer = "";
    
    	map<char, int> mk;
    	for (int i = 0; i < choices.size(); i++) {
    		for (int j = 0; j < survey.size(); j++) {
    			int cnt = 0;
    			if (choices[i] <= 4) {
    				cnt = 4 - choices[i];
    				mk[survey[i][0]] += cnt;
    				break;
    			}
    			else {
    				cnt = choices[i] - 4;
    				mk[survey[i][1]] += cnt;
    				break;
    			}
    		}
    	}
    
    	vector<char> vec = { 'R' , 'T' , 'C' , 'F' , 'J' , 'M' , 'A', 'N' };
    	int pre = 0;
    	for (int i = 1; i < vec.size(); i += 2) {
    		
    		char c;
    		if (mk[vec[pre]] == mk[vec[i]]) {
    			c = vec[i] < vec[pre] ? vec[i] : vec[pre];
    		}
    		else {
    			c= mk[vec[pre]] < mk[vec[i]] ? vec[i] : vec[pre];
    		}
    		pre += 2;
    		answer += c;
    	}
    
    	return answer;
    }

     

    728x90

    댓글

© 2022. code-space ALL RIGHTS RESERVED.