-
[C++] Programmers: 성격 유형 검사하기프로그래밍/알고리즘 PS 2024. 4. 1. 21:03
학교에서 진행하는 수업에서 공유받은 알고리즘 문제를 풀어보았다. 문제의 난이도는 프로그래머스 레벨 1으로, 난이도를 보았을 때 간단히 풀 수 있는 문제로 예상하였으나 문제의 길이가 길어 읽고 이해하는 데에만 오랜 시간이 걸렸고, 시간을 들여 문제를 풀어냈다.
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/118666
문제 분석
문제를 구체적으로 분석하기 앞서 간단히 설명하면, 카카오 방식의 MBTI 검사를 만든 문제라고 할 수 있다. 각 검사지 "RT", "CF", "JM", "AN" 유형 중에서 높은 점수가 나온 쪽이 검사 결과로 나타나는 방식이다. 예를 들면 누군가는 검사 결과 "RCJN"이 나올 수 있다.
문제 풀이
문제를 풀 때에는
map
자료 구조를 활용하여 문제를 풀어내었다.먼저 map 자료구조의 인스턴스
m
을 생성하고 "RTCFJMAN"에 해당되는 key에 대한 값을 모두 0으로 초기화하였다. 그리고 사용자가 선택한 값choices
에 따라 점수를 계산하여m
에서 key에 해당하는 점수를 높여주었다.마지막에 if문을 통해 "RTCFJMAN" 중 어떤 key가 더 높은 점수를 받았는지 비교하여 answer를 정해주었다.
전체 코드
#include <string> #include <vector> #include <map> using namespace std; string solution(vector<string> survey, vector<int> choices) { string answer = ""; map<string, int> m; m.insert({"R", 0}); m.insert({"T", 0}); m.insert({"C", 0}); m.insert({"F", 0}); m.insert({"J", 0}); m.insert({"M", 0}); m.insert({"A", 0}); m.insert({"N", 0}); int size = survey.size(); for (int i = 0; i < size; i++) { int score = 0; string target = ""; switch (choices[i]) { case 1: case 2: case 3: score = 4 - choices[i]; target = survey[i][0]; break; case 5: case 6: case 7: score = choices[i] - 4; target = survey[i][1]; break; } auto map_it = m.find(target); m[target] = score + (map_it->second); } if (m.find("R")->second >= m.find("T")->second) answer += "R"; else answer += "T"; if (m.find("C")->second >= m.find("F")->second) answer += "C"; else answer += "F"; if (m.find("J")->second >= m.find("M")->second) answer += "J"; else answer += "M"; if (m.find("A")->second >= m.find("N")->second) answer += "A"; else answer += "N"; return answer; }
'프로그래밍 > 알고리즘 PS' 카테고리의 다른 글
[C++] BOJ 3273번: 두 수의 합 (1) 2024.04.10 [C++] Programmers: 이모티콘 할인행사 (0) 2024.04.08 [C++] BOJ 9012번: 괄호 (0) 2024.04.01 [C++] BOJ 1546번: 평균 (0) 2024.04.01 [C++] BOJ 2456번: 나는 학급회장이다 (0) 2024.03.29