-
[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