

파트별로 확인할 필요가 있다.
파트 1: 지표와 성격유형의 순서
지표 번호 성격 유형 1번 지표 라이언형(R), 튜브형(T) 2번 지표 콘형(C), 프로도형(F) 3번 지표 제이지형(J), 무지형(M) 4번 지표 어피치형(A), 네오형(N)
정해진 순서에 따라서 점수를 추가해줘서 가중치가 높은 유형을 최종 결정할 필요가 있다.
파트 2: 동의와 비동의 점수
매우 동의나 매우 비동의 선택지를 선택하면 3점을 얻습니다. 동의나 비동의 선택지를 선택하면 2점을 얻습니다. 약간 동의나 약간 비동의 선택지를 선택하면 1점을 얻습니다. 모르겠음 선택지를 선택하면 점수를 얻지 않습니다.
쉽게 말하면 동의랑 비동의를 ” “로 공통된 변수라 가정한다. 그러면 다음 방식으로 점수를 누적시킨다. 매우 ” ” = 3점, ” ” = 2점, 약간 ” “=1점, 모르겠음 = 0점을 각 유형 별로 누적
choices 뜻 1 매우 비동의 2 비동의 3 약간 비동의 4 모르겠음 5 약간 동의 6 동의 7 매우 동의
다행히 이 문제는 입력을 숫자배열로 받으니 이렇게 바꿔주면 된다. choice [1]OR[7] = 3점, [2]OR[6] = 2점 , [3]OR[4] = 1점 , [5] = 0점
코드 풀이
1. 주요 변수와 자료 구조
-
unordered_map<char, int> scores- 각 성격 유형의 점수를 저장하는 맵.
- 성격 유형의 키(
R,T,C,F,J,M,A,N)와 해당 점수를 매핑.
-
survey- 성격 유형 쌍을 저장한 벡터. 예를 들어,
"RT"는R과T유형 간의 비교.
- 성격 유형 쌍을 저장한 벡터. 예를 들어,
-
choices- 사용자의 선택을 나타내는 정수 배열.
각 값은 아래와 같이 의미:1: 매우 비동의 2: 비동의 3: 약간 비동의 4: 중립 5: 약간 동의 6: 동의 7: 매우 동의
- 사용자의 선택을 나타내는 정수 배열.
2. 점수 계산 로직
-
for루프는 각 설문 항목에 대해 점수를 계산. -
disagree와agree:pair[0]은 비동의 성격 유형,pair[1]은 동의 성격 유형.
-
점수 부여:
- 선택지가
4(중립)보다 작으면disagree유형에 점수를 추가.- 예:
choice = 3이면4 - 3 = 1만큼disagree에 점수가 추가됩니다.
- 예:
- 선택지가
4보다 크면agree유형에 점수를 추가.- 예:
choice = 6이면6 - 4 = 2만큼agree에 점수가 추가됩니다.
- 예:
- 선택지가
3. 결과 문자열 생성
- 네 가지 지표를 기준으로 결과를 생성:
RvsTCvsFJvsMAvsN
- 각 지표에서 점수가 더 높은 유형을 선택.
- 예:
scores['R'] >= scores['T']이면R을 결과 문자열에 추가.
- 예:
4. 반환 값
answer는 네 가지 지표에서 선택된 유형들을 이어붙인 문자열.
예:"RCJA"
사용 예시
입력:
vector<string> survey = {"AN", "CF", "MJ", "RT", "NA"};
vector<int> choices = {5, 3, 2, 7, 5};계산 과정:
-
survey[0] = "AN", choice = 5A(동의) 점수 +=5 - 4 = 1
-
survey[1] = "CF", choice = 3C(비동의) 점수 +=4 - 3 = 1
-
survey[2] = "MJ", choice = 2M(비동의) 점수 +=4 - 2 = 2
-
survey[3] = "RT", choice = 7T(동의) 점수 +=7 - 4 = 3
-
survey[4] = "NA", choice = 5A(동의) 점수 +=5 - 4 = 1

그러나 해당 방식은 질문에 유형이 추가로 포함되거나 제거되면 상당히 많은 부분 수정해야 하는 방식이기에 최적화가 더 가능할 것 같다는 게 느껴진다. 그래서 부득이하게 GPT에서 자문을 구하여 맵핑을 간소화하고 변수.find 문법으로 다시 작성해보았다.
string solution(vector<string> survey, vector<int> choices) {
// 성격 유형 점수를 배열로 관리 (R, T, C, F, J, M, A, N)
int scores[8] = {0}; // R, T, C, F, J, M, A, N 순서
string types = "RTCFJMAN"; // 성격 유형 매핑
for (size_t i = 0; i < survey.size(); ++i) {
int choice = choices[i];
int index = types.find(survey[i][choice > 4]); // 선택지에 따라 인덱스 결정
int score = abs(choice - 4); // 점수 계산 (중립은 0)
scores[index] += score; // 점수 누적
}
// 결과 문자열 생성
string answer = "";
for (int i = 0; i < 8; i += 2) {
answer += (scores[i] >= scores[i + 1] ? types[i] : types[i + 1]);
}
return answer;
}
