ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] Lv.1 성격 유형 검사하기 _JavaScript
    알고리즘/프로그래머스 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;
    }

     

     

    🧶 후기

    엠비티아이 문제다 👀👀 

     

     

     

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    LIST
Designed by Tistory.