알고리즘/프로그래머스
[Programmers] Lv.1 성격 유형 검사하기 _JavaScript
3o14
2023. 5. 23. 17:25
728x90
반응형
프로그래머스 Lv1. 성격 유형 검사하기 [자바스크립트]
🧶 문제 설명
나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.
지표 번호 | 성격 유형 |
1번 지표 | 라이언형(R), 튜브형(T) |
2번 지표 | 콘형(C), 프로도형(F) |
3번 지표 | 제이지형(J), 무지형(M) |
4번 지표 | 어피치형(A), 네오형(N) |
4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
각 질문은 아래 표처럼 점수를 매길 수 있습니다.
선택지 | 성격 유형 점수 |
매우 비동의 | 네오형 3점 |
비동의 | 네오형 2점 |
약간 비동의 | 네오형 1점 |
모르겠음 | 어떤 성격 유형도 점수를 얻지 않습니다 |
약간 동의 | 어피치형 1점 |
동의 | 어피치형 2점 |
매우 동의 | 어피치형 3점 |
제한사항
- 1 ≤ survey의 길이 ( = n) ≤ 1,000
- choices의 길이 = survey의 길이
• choices | • 뜻 |
• 1 | • 매우 비동의 |
• 2 | • 비동의 |
• 3 | • 약간 비동의 |
• 4 | • 모르겠음 |
• 5 | • 약간 동의 |
• 6 | • 동의 |
• 7 | • 매우 동의 |
입출력 예
survey | choices | result |
["AN", "CF", "MJ", "RT", "NA"] | [5, 3, 2, 7, 5] | "TCMA" |
["TR", "RT", "TR"] | [7, 1, 3] | "RCJA" |
🧶 풀이법
1. 객체에 각 지표를 key값으로, 점수를 value로 세팅합니다.
2. 각 객체를 돌면서 -4를 해준 값을 해당 key값의 value에 더해줍니다.
예를 들어, choices가 1점일 경우 -4를 하면 -3이 되므로 해당 key의 value에 -3을 더하게 됩니다.
3. 지표가 올바른 순서일 경우와 아닌 경우를 나누어 수행합니다. (한 지표에서도 "AN"과 "NA" 모두 생각해야 하기 때문)
4. 다시 객체를 순회하며 값이 0보다 클 경우 오른쪽 지표를, 0보다 작거나 같을 경우 왼쪽 지표를 answer 변수에 대입합니다.
🧶 코드
function solution(survey, choices) {
let answer = "";
// 1. 객체에 각 지표를 key값으로, 점수를 value로 세팅합니다.
let mbti = {
"RT": 0,
"CF": 0,
"JM": 0,
"AN": 0,
}
// 2. 각 객체를 돌면서 -4를 해준 값을 해당 key값의 value에 더해줍니다.
for(let i = 0; i < survey.length; i++){
// 3. 지표가 올바른 순서일 경우와 아닌 경우를 나누어 수행합니다.
if(survey[i] in mbti){
mbti[survey[i]] += choices[i] - 4;
}else {
survey[i] = survey[i].split("").reverse().join("");
mbti[survey[i]] += -(choices[i] - 4);
}
}
// 4. 다시 객체를 순회하며 값이 0보다 클 경우 오른쪽 지표를,
// 0보다 작거나 같을 경우 왼쪽 지표를 answer 변수에 대입합니다.
for(e in mbti){
e.split("");
if (mbti[e] > 0) answer += e[1];
else answer += e[0]
}
return answer;
}
🧶 후기
엠비티아이 문제다 👀👀
LIST