GitHubSeob

C++ / 프로그래머스 / 성격 유형 검사하기 본문

Programmers/Level 1

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

GitHubSeob 2023. 6. 21.

문제

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

 

프로그래머스

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

programmers.co.kr

문제풀이

만약 성격 유형이 A, B가 있다면

1번은 A형 3점, 2번은 A형 2점, 3번은 A형 1점이므로, 선택한 번호가 3 이하이면 4에서 선택한 번호를 뺀다.

4번은 점수를 얻지 않으므로 넘긴다.

5번은 B형 1점, 6번은 B형 2점, 7번은 B형 3점이므로, 선택한 번호가 5이상이면 선택한 번호에서 4를 뺀다.

빼고 남은 값을 해당 유형의 map에 저장한다.

그렇게 되면 map는 {"유형", 점수}가 저장된다.

따로 char을 반환하는 함수를 만들어서 A형 점수 >= B형 점수이면 A를, 그 외의 경우는 B를 반환한다.

마지막으로 answer에 순서대로 더하고 답을 return 한다.

 

코드

#include <string>
#include <vector>
#include <map>
using namespace std;

map<char, int>score;

char type(char A, char B) {
    if (score[A] >= score[B]) {
        return A;
    }
    else if (score[A] < score[B]) {
        return B;
    }
}

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    int idx(0);

    for (idx = 0; idx < survey.size(); ++idx) {
        if (choices[idx] <= 3) {
            score[survey[idx][0]] += (4 - choices[idx]);
        }
        else if (choices[idx] > 4) {
            score[survey[idx][1]] += (choices[idx] - 4);
        }
    }

    answer += type('R', 'T');
    answer += type('C', 'F');
    answer += type('J', 'M');
    answer += type('A', 'N');

    return answer;
}