Lv1_[성격유형 검사하기, C++] 알고리즘 정리 - 프로그래머스
문제 내용, 조건, 예시는 프로그래머스 사이트 참조
문제와 풀이는 길고 복잡하게 보이지만 간단하게 생각하면 쉽게 풀리는 문제
각 지표별 2개의 유형, 0~3까지의 점수를 구해서 알맞은 문자를 리턴 시켜주면 된다.
예를 들어 survey : RT를 정리해보면
위와 같은 형태로 정리가 가능하다.
여기서 choice의 값으로 원하는 index와 점수를 구할 수가 있는데
· score : (choice - 4)의 절대값
· index : (choice / 4)의 정수값
로 계산이 가능하다.
ex) survey가 RT이고 choice값이 5인 경우
· score : abs(5 - 4) = 1
· index : (5 / 4) = 1
T[1]에 score는 1점을 얻을 수 있다. (T에 1점 저장)
ex) survey가 RT이고 choice값이 1인 경우
· score : abs(1 - 4) = 3
· index : (1 / 4) = 0
R[0]에 score는 3점을 얻을 수 있다 (R에 3점 저장)
구한 값을 저장 방식은 vector<int>에 값을 저장해 주면 된다.
각 인덱스는 알파벳으로 매칭을 해주고 기억해주면 된다.
(R:0, T:1, C:2, F:3, J:4, M:5, A:6, N:7)
지표별로 두 개씩 묶어주고 동일한 점수면 "단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단"의 조건이 있기 때문에 알파벳이 빠른 것을 앞으로 배치해주었다.
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <string> #include <vector> int getIndex(char c) { int value; switch(c) { case 'R': { value = 0; } break; case 'T': { value = 1; } break; case 'C': { value = 2; } break; case 'F': { value = 3; } break; case 'J': { value = 4; } break; case 'M': { value = 5; } break; case 'A': { value = 6; } break; case 'N': { value = 7; } break; default: { value = -1; } break; } return value; } int getChar(int i) { char value; switch(i) { case 0: { value = 'R'; } break; case 1: { value = 'T'; } break; case 2: { value = 'C'; } break; case 3: { value = 'F'; } break; case 4: { value = 'J'; } break; case 5: { value = 'M'; } break; case 6: { value = 'A'; } break; case 7: { value = 'N'; } break; default: { value = -1; } break; } return value; } string solution(vector<string> survey, vector<int> choices) { string answer = ""; vector<int> saveScore; saveScore.resize(8, 0); // size 8, 0으로 초기화 // 성격 유형과 choice 값으로 점수 저장 for(unsigned int i = 0; i < survey.size(); i++) { int choices_num = choices[i]; int score = abs(choices_num - 4); if(score != 0) { char c = survey[i][choices_num / 4]; int index = getIndex(c); if(index != -1) { saveScore[index] += score; } } } // 점수 계산이 끝내고 문자로 변환 for(unsigned int i = 0; i < saveScore.size(); i+=2) { if(saveScore[i] < saveScore[i+1]) { answer += getChar(i+1); } else { // saveScore[0] >= saveScore[1] answer += getChar(i); } } return answer; } | cs |
↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓