학습 정리/👨‍💻 PS Study

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

무딘붓 2023. 5. 15. 18:19

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

 

프로그래머스

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

programmers.co.kr

[소스코드]

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    char typeName[8]={'R','T','C','F','J','M','A','N'};
    int typeScore[8]={0};
    for(int i=0;i<survey.size();i++){
        if (choices[i]==1) {            
            for(int j=0;j<8;j++){
                if(typeName[j]==survey[i][0])
                    typeScore[j]+=3;
            }
        }
        else if (choices[i]==2) {            
            for(int j=0;j<8;j++){
                if(typeName[j]==survey[i][0])
                    typeScore[j]+=2;
            }
        }
        else if (choices[i]==3) {            
            for(int j=0;j<8;j++){
                if(typeName[j]==survey[i][0])
                    typeScore[j]+=1;
            }
        }

        else if (choices[i]==5) {            
            for(int j=0;j<8;j++){
                if(typeName[j]==survey[i][1])
                    typeScore[j]+=1;
            }
        }        
        else if (choices[i]==6) {            
            for(int j=0;j<8;j++){
                if(typeName[j]==survey[i][1])
                    typeScore[j]+=2;
            }
        }        
        else if (choices[i]==7) {            
            for(int j=0;j<8;j++){
                if(typeName[j]==survey[i][1])
                    typeScore[j]+=3;
            }
        }  
    }

    answer += typeScore[0] >= typeScore[1] ? 'R' : 'T';
    answer += typeScore[2] >= typeScore[3] ? 'C' : 'F';
    answer += typeScore[4] >= typeScore[5] ? 'J' : 'M';
    answer += typeScore[6] >= typeScore[7] ? 'A' : 'N';
    return answer;
}

처음으로 풀어본 프로그래머스 코딩 테스트 문제입니다.

성격 유형을 저장한 char 배열과 점수를 저장한 int 배열을 만들어서 풀었습니다.

 

map을 사용한 적이 없어 위와 같이 무식하게 풀이해봤습니다.

 

map을 학습하고 사용한 풀이는 다음과 같습니다.

#include <string>
#include <vector>
#include <map>

using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    map<char, int> typeScore;
    int score[8] = {0,3,2,1,0,1,2,3};

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

    answer += typeScore['R'] >= typeScore['T'] ? 'R' : 'T';
    answer += typeScore['C'] >= typeScore['F'] ? 'C' : 'F';
    answer += typeScore['J'] >= typeScore['M'] ? 'J' : 'M';
    answer += typeScore['A'] >= typeScore['N'] ? 'A' : 'N';
    return answer;
}

map의 사용법은 아래 링크를 참고해주세요

https://sirius7.tistory.com/103