본문 바로가기
Coding Test/C++

[프로그래머스] 성격 유형 검사하기 C++ Code

by giem 2022. 8. 19.
반응형

이전 포스트의 파이썬 코드에 이어

프로그래머스 성격 유형 검사하기를 C++로 풀어보겠다.

2022년 카카오 인턴 코딩 테스트 출제로 아직 프로그래머스에선 푼 사람이 많지 않다.


문제

레벨 1치고 문제가 좀 길다. 하지만 간단하다.

 

survey에 성격 유형 지표들이 들어있고

choices에 따라 survey의 유형에 값을 더해주고

4개의 분류에서 각각 값이 높은 지표를 리턴하면 된다.


구현

survey와 choices의 개수가 같기 때문에

이 사이즈만큼 반복을 하고

map에 survey의 지표 중에 choices에 따라 선택하여 값을 더해준다.

그 후 map의 값을 비교하여 성격 유형 값에 추가해주고

성격유형을 리턴한다.

 

문제만 길지 간단한 문제라고 생각한다.


코드
#include <string>
#include <vector>
#include <map>

using namespace std;

int score[8] = {0, 3, 2, 1, 0, 1, 2, 3};

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    map<char, int> surv_elm;

    for(int i =0; i<survey.size(); i++)
        surv_elm[survey[i][choices[i]/4]] += score[choices[i]];

    answer += surv_elm['R'] >= surv_elm['T'] ? "R" : "T";
    answer += surv_elm['C'] >= surv_elm['F'] ? "C" : "F";
    answer += surv_elm['J'] >= surv_elm['M'] ? "J" : "M";
    answer += surv_elm['A'] >= surv_elm['N'] ? "A" : "N";

    return answer;
}

 

약간의 트릭은 choices[i] /4 부분인데

index 4까지는 앞의 값, 그 이후는 뒤의 값을 보도록 한 것이다.

c/c++에서는 int / int 값이 int 이므로 따로 처리할 것이 없다.

 

나머지는 쉽게 이해할 수 있다.


다른 풀이

아직 신상문제라 그런지 좋은 코드가 보이지 않는다.

 

혹시 좋은 방법이 있다면 댓글로 알려주시면 감사하겠습니다.

반응형

댓글