<프로그래머스 C++> 성격 유형 검사하기 풀이
2026. 5. 26. 09:49ㆍProgrammers
문제
4개의 지표로 성격 유형을 구분하는 검사지를 구현하는 검사지를 구현하는 문제이다.
각 질문마다 비동의 / 동의 관련 성격 유형이 정해져 있고, 선택지(1 ~ 7)에 따라 점수가 부여된다. 모든 질문의 점수를 합산해 각 지표에서 높은 점수의 유형을 반환한다. 동점이면 사전순으로 빠른 유형을 선택한다.
| survey | choices | result |
| ["AN", "CF", "MJ", "RT", "NA"] | [5, 3, 2, 7, 5] | "TCMA" |
| ["TR", "RT", "TR"] | [7, 1, 3] | "RCJA" |
문제 흐름 파악
1. 점수 지정 방식
8가지 성격 유형 { R, T, C, F, J, M, A, N } 각각의 점수를 저장해야 한다.
알파벳을 키로, 점수를 값으로 저장하는 map<char, int>를 사용했다.
2. 점수 계산 방식
choices는 1~7이고, 4가 기준점이다.
- choices < 4 → 비동의 관련 → survey[i][0]에 점수 추가
- choices == 4 → 모르겠음 → 0점
- choices > 4 → 동의 관련 → survey[i][1]에 점수 추가
점수의 크기는 4와의 차이로 계산한다.
abs(choices[i] - 4)
3. 지표별 비교
4개의 지표를 순서대로 비교해 더 높은 점수의 유형을 answer에 추가한다.
동점이면 사전순으로 빠른 유형을 선택한다.
문제 풀이
#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(vector<string> survey, vector<int> choices) {
string answer = "";
map<char, int> mbti;
for(int i = 0; i < survey.size(); ++i)
{
int s = abs(choices[i] - 4);
if(choices[i] < 4)
mbti[survey[i][0]] += s;
else if(choices[i] > 4)
mbti[survey[i][1]] += s;
}
vector<pair<char,char>> types = {{'R','T'}, {'C','F'}, {'J','M'}, {'A','N'}};
for(auto& p : types)
{
if(mbti[p.first] >= mbti[p.second])
answer += p.first;
else
answer += p.second;
}
return answer;
}
코드 흐름
1. 점수 계산
int s = abs(choices[i] - 4);
if(choices[i] < 4)
mbti[survey[i][0]] += s;
else if(choices[i] > 4)
mbti[survey[i][1]] += s;
abs(choices[i] - 4)로 점수 크기를 계산한다. 비동의면 survey[i][0], 동의면 survey[i][1] 유형에 점수를 누적한다.
choices==4면 아무것도 추가하지 않는다.
2. 지표별 비교
vector<pair<char,char>> types = {{'R','T'}, {'C','F'}, {'J','M'}, {'A','N'}};
for(auto& p : types)
{
if(mbti[p.first] >= mbti[p.second])
answer += p.first;
else
answer += p.second;
}
4개 지표를 순서대로 순회한다.
p.first >= p.second면 p.first를 추가하는데, >=로 동점 처리도 한 번에 해결된다.
이미 사전순 정렬이 되어있기 때문이다.
핵심 포인트
- map<char, int>로 8가지 성격 유형의 점수를 관리한다
- 점수 크기는 abs(choices[i] - 4)로 계산한다
'Programmers' 카테고리의 다른 글
| <프로그래머스 C++> 개인정보 수집 유효기간 풀이 (0) | 2026.06.01 |
|---|---|
| <프로그래머스 C++> 바탕화면 정리 풀이 (0) | 2026.05.29 |
| <프로그래머스 C++> 햄버거 만들기 풀이 (0) | 2026.05.22 |
| <프로그래머스 C++> 둘만의 암호 풀이 (1) | 2026.05.21 |
| <프로그래머스 C++> 휴대폰 자판 풀이 (0) | 2026.05.20 |