[프로그래머스] LV1. 성격 유형 검사하기

윤인경·2024년 1월 16일
0

코딩테스트

목록 보기
37/38

문제 설명

프로그래머스 LV1. 성격 유형 검사하기

내가 작성한 코드

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

using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    map<char, int> score;
    score['R'] = 0;
    score['T'] = 0;
    score['C'] = 0;
    score['F'] = 0;
    score['J'] = 0;
    score['M'] = 0;
    score['A'] = 0;
    score['N'] = 0;
    for(int i = 0; i < survey.size(); i++){
        int sc = abs(choices[i] - 4);
        if (choices[i] < 4){
            score[survey[i][0]] += sc;
        } else {
            score[survey[i][1]] += sc;
        }
    }
    
    if(score['R'] >= score['T']){
        answer += "R";
    } else {
        answer += "T";
    }
    
    if(score['C'] >= score['F']){
        answer += "C";
    } else {
        answer += "F";
    }
    
    if(score['J'] >= score['M']){
        answer += "J";
    } else {
        answer += "M";
    }
    
    if(score['A'] >= score['N']){
        answer += "A";
    } else {
        answer += "N";
    }
    return answer;
}

문제 풀이

map을 사용한 풀이
map<char, int> score로 각 char마다 점수를 카운트하고 점수 비교를 통해 유형을 분류한다.

풀이에서 아쉬운 점

각 score를 비교하는 부분의 코드가 반복되는 코드인데 4번이나 들어가서 코드가 길어졌다.
또 map에 초기 값을 넣는 부분도 반복되는데 계속 들어가 있다.

다른 사람 풀이

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

using namespace std;

char MBTI[4][2] = {
    {'R','T'},
    {'C','F'},
    {'J','M'},
    {'A','N'}
};

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

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

    for(int i = 0; i < 4; ++i){
        if(score[MBTI[i][0]] >= score[MBTI[i][1]]) ans += MBTI[i][0];
        else ans += MBTI[i][1];
    }

    return ans;
}

for문을 사용해서 반복되는 코드를 줄였다.

여기에서 궁금한 것

if에서 비교할 때 map에 key가 없어도 비교가 되는 것인가?
map에 int값을 넣을 때 0을 먼저 넣지 않고 += 연산을 통해 넣을 수 있는 것인가?
-> 실행이 되는 것을 보면 상관 없는 것 같다.

profile
코딩 공부 및 프로젝트 정리

0개의 댓글