[프로그래머스] 성격 유형 검사하기 (C++)
[프로그래머스] 성격 유형 검사하기 (C++)
프로그래머스 성격 유형 검사하기
📝 문제 요약
입력되는
survey에는 두 개의 성격 유형이 들어있다.choices에 따라 해당 성격 유형에 점수를 더한다.점수를 합산하여 두 성격 유형 쌍에서 첫번째 유형의 점수가 더 크거나 같으면 첫번째 유형을, 더 작다면 두번째 유형을 선택한다.
성격 유형
| 지표 번호 | 성격 유형 |
|---|---|
| 1번 지표 | 라이언형(R), 튜브형(T) |
| 2번 지표 | 콘형(C), 프로도형(F) |
| 3번 지표 | 제이지형(J), 무지형(M) |
| 4번 지표 | 어피치형(A), 네오형(N) |
선택지 예시
survey 에 “AN”이 들어왔을때 choices 에 따른 예시
| choices | 유형 | 점수 |
|---|---|---|
| 1 | A | 3점 |
| 2 | A | 2점 |
| 3 | A | 1점 |
| 4 | 없음 | 없음 |
| 5 | N | 1점 |
| 6 | N | 2점 |
| 7 | N | 3점 |
✅ 코드 설명
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);
}
survey와choices크기는 같으므로, 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.