Post

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

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

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

문제 링크

📝 문제 요약

  • 입력되는 survey 에는 두 개의 성격 유형이 들어있다.

  • choices 에 따라 해당 성격 유형에 점수를 더한다.

  • 점수를 합산하여 두 성격 유형 쌍에서 첫번째 유형의 점수가 더 크거나 같으면 첫번째 유형을, 더 작다면 두번째 유형을 선택한다.

성격 유형

지표 번호성격 유형
1번 지표라이언형(R), 튜브형(T)
2번 지표콘형(C), 프로도형(F)
3번 지표제이지형(J), 무지형(M)
4번 지표어피치형(A), 네오형(N)

선택지 예시

survey 에 “AN”이 들어왔을때 choices 에 따른 예시

choices유형점수
1A3점
2A2점
3A1점
4없음없음
5N1점
6N2점
7N3점

✅ 코드 설명

1
2
3
4
5
6
char types[4][2] = {
    {'R', 'T'},
    {'C', 'F'},
    {'J', 'M'},
    {'A', 'N'}
};
1
unordered_map<char, int> score_map;

우선 2차원 배열 types 을 만들어 성격 유형들을 모두 담아주고, 각 유형별 점수를 담아줄 score_map 을 만들어준다.

1
2
3
4
for (int i = 0; i < survey_size; ++i) {
    int score = choices[i] - 4;
    score_map[survey[i][score > 0]] += abs(score);
}
  • surveychoices 크기는 같으므로, for문을 함께 돌리기
  • score 가 0보다 작으면 score_map 에 첫 번째 글자를 키값으로 하여 점수 더하기
  • score 가 0보다 크면 score_map 에 두 번째 글자를 키값으로 하여 점수 더하기
1
2
3
4
5
6
7
8
string ans = "";
for(int i = 0; i < 4; ++i){
    char c1 = types[i][0];
    char c2 = types[i][1];
    if(score_map[c1] >= score_map[c2]) ans += c1;
    else ans += c2;
}
return ans; 
  • 두 성격 유형 쌍을 키로 삼아 score_map 에 들어있는 합산된 점수를 비교
  • 크거나 같으면 첫 번째 유형을, 작다면 두 번째 유형을 선택하여 ans 에 저장하여 리턴

전체코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

string solution(vector<string> survey, vector<int> choices) {
    char types[4][2] = {
        {'R', 'T'},
        {'C', 'F'},
        {'J', 'M'},
        {'A', 'N'}
    };
    
    const int survey_size = survey.size();
    unordered_map<char, int> score_map;

    for (int i = 0; i < survey_size; ++i) {
        int score = choices[i] - 4;
        score_map[survey[i][score > 0]] += abs(score);
    }
    
    string ans = "";
    for(int i = 0; i < 4; ++i){
        char c1 = types[i][0];
        char c2 = types[i][1];
        if(score_map[c1] >= score_map[c2]) ans += c1;
        else ans += c2;
    }
    
    return ans; 
}
This post is licensed under CC BY 4.0 by the author.

Trending Tags