나만의 작은 도서관

문제 118666. 성격 유형 검사하기 본문

프로그래머스 문제풀이/코드카타

문제 118666. 성격 유형 검사하기

pledge24 2024. 6. 22. 17:42

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

난이도 : Lv.1  

 

문제 요약 설명

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

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

 

각 질문지에는 총 7가지 선택지가 존재하며 "XY" 질문지는 다음과 같이 X또는 Y유형의 점수를 얻습니다. (여기서 X, Y는 R, T, C, F, J, M, A, N 총 8개 중 하나)

선택지 성격 유형 점수
매우 비동의 X유형 +3점
비동의 X 형 +2점
약간 비동의 X 형 +1점
모르겠음 X, Y전부 추가 점수 없음(0점)
약간 동의  Y형 +1점
동의 Y형 +2점
매우 동의 Y형 +3점

 

검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.(단, 각 성격 유형 점수가 같은 경우 사전 순으로 빠른 성격 유형을 선택합니다. ex. C: 10점, F: 10점 -> C선택)

입력

  • 질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey
  • 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices

입력 제한

  • 1 ≤ survey의 길이 ( = n) ≤ 1,000
  • 1 ≤ choices의 원소 ≤ 7

입력 예제

// input
["AN", "CF", "MJ", "RT", "NA"] // survey
[5, 3, 2, 7, 5] // choices

// ans
"TCMA"

 

풀이 방식

map 자료구조를 이용해 survey에 저장된 각 설문지를 순회하며 각 유형의 점수를 계산한다. map은 다음과 같이 저장된다. 

map: {A: 1,  N: 4, C: 2, ... T: 5}

(참고로, map 자료구조는 value타입을 int로 지정했을 때, 할당하지 않은 key값의 value들은 0을 기본값으로 가지고 있다. 따라서 한 번도 설문지에 나오지 않은 유형도 쉽게 점수를 대소비교 할 수가 있다. undeclared와 같은 오류가 안 뜨니 너무나도 편하다!)

 

순회가 끝났다면, 1번 지표부터 차례대로 4번 지표까지 점수가 높은 유형을 얻어 answer에 붙이고, answer를 결과로 반환한다.

정답 코드 

더보기
#include <string>
#include <vector>
#include <map>

using namespace std;

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