coding_test/programmers

lv1 / 성격 유형 검사 / 카카오 / C++

CodeJin 2022. 9. 13. 16:57

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

 

프로그래머스

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

programmers.co.kr


그냥 구현문제이다. map을 통해 모든 성격 유형에 대해 점수를 매기고, 더 큰 점수를 가진 성격유형을 붙여주면 된다.

 

#include <bits/stdc++.h>
using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    // 변수 선언 및 초기화
    string answer = "";
    array<char, 8> category = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
    map<char, int> personality_score;

    for(auto& elem : category) personality_score.insert({elem, 0});
    
    // 점수 부여
    for(int i = 0; i < survey.size(); i++) {
        string& item = survey[i]; // 성격 질문
        int choice = choices[i]; // 점수

            if(choice > 4) { // 4점 초과. 뒷 성격에 점수 부여
                personality_score[item[1]] += choice - 4;
            }
            else if (choice < 4) { // 4점 미만. 앞 성격에 점수 부여
                personality_score[item[0]] += 4 - choice;
            }
    }

    // 성격 유형 부여
    for(int i = 0; i < 8; i += 2) {
        char first = category[i];
        char second = category[i + 1];
        int first_score = personality_score[first];
        int second_score = personality_score[second];

        if(first_score != second_score) answer += first_score > second_score ? first : second;
        else answer += first < second ? first : second;
    }


    return answer;
}