본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 성격 유형 검사하기] c++ (풀이,코드)

by 말린밴댕이_공부 2023. 6. 22.
반응형

문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

문제

 

풀이 및 코드

이 문제를 사용할때 저는 map을 이용하여 문제를 풀이하였습니다.

 

map을 사용하여 그것에 대해서 score에 대해서 ++을 진행해줍니다.

choices의 점수에서 -4를 진행하여 그것에 대해서

음수라면 survey[i][0]에 대한 map의 점수 ++

양수라면 survey[i][1]에 대한 map의 점수 ++을 진행한 후 마지막에 비교 연산을 통해 진행

(단, 사전순이니 RCJA가 값이 같다면 우선순위)

 

/*
성격 유형 검사하기
유형이 4개가 있음  총 16개가 나옴 AN,CF,MJ,RT등 4세트 로 나오게 되는거
음 갱신을 해야하는건데 이럴때 map을 쓰면 항상 제격이라고 느낀단 말이지
*/
#include <string>
#include <vector>
#include <map>
#include <iostream>

using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
   
    map<char,int> scoreMap{
        {'R',0},{'C',0},{'J',0},{'A',0},
        {'T',0},{'F',0},{'M',0},{'N',0}
    };
   
    for(int i = 0; i < survey.size();i++){
        int score = choices[i] - 4;
        if(score < 0){            
            scoreMap[survey[i][0]] += abs(score);
        }else if (score > 0){
            scoreMap[survey[i][1]] += score;
        }
    }
   
    // >=의 이유는 사전순이므로
    answer += scoreMap['R'] >= scoreMap['T'] ? 'R' : 'T';
    answer += scoreMap['C'] >= scoreMap['F'] ? 'C' : 'F';
    answer += scoreMap['J'] >= scoreMap['M'] ? 'J' : 'M';
    answer += scoreMap['A'] >= scoreMap['N'] ? 'A' : 'N';
   
    return answer;
}
반응형

댓글