본문 바로가기

알고리즘 스터디

2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기

728x90

INDEX

    https://school.programmers.co.kr/learn/courses/30/lessons/118666

     

    프로그래머스

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

    programmers.co.kr

     

    Solution

    저는 최대한 코드를 한눈에 알아보기 쉽게 작성하는 걸 좋아합니다.

    이번 문제도 알아보기 쉽고 단순한 코드로 작성했습니다.

     

    총 16가지의 성격 유형이 있고, 주어지는 대답과 그에 따른 점수표를 완성하여 조건에 맞는 성격유형을 반환해야 합니다.

     

     

    survey의 각 원소는 앞에서부터 비동의에 대한 유형, 동의에 대한 유형 순서로 이루어져 있습니다.

    choices는 각 항목에 대한 응답 (매우 비동의(1), 비동의(2), 약간 비동의(3), 모르겠음(4), 약간 동의(5), 동의(6), 매우 동의(7) )을 의미합니다.

     

    이를 MAP 형식으로 만들어보면 다음과 같습니다.

    let answerMap = {
            'R': 0, 'T' :0, 'C': 0, 'F' :0, 'J' :0, 'M' : 0, 'A' : 0,'N' : 0
        }
    const choiceMap = {1 : 0, 2 : 0, 3 :0, 4 : -1, 5: 1, 6 : 1, 7 : 1}
    const scoreMap = {1 : 3, 2 : 2, 3 :1, 4 : 0, 5: 1, 6 : 2, 7 : 3}

    answerMap 에는 각 점수의 합산을, choiceMapsurvey 원소의 INDEX 값을, scoreMap 은 점수표를 의미합니다.

    만약 survey가 AN, choice 가 5인 경우 동의에 체크를 하였으므로 "AN" 중에서 뒷 알파벳인 N에 1 점을 주어야 합니다.

     

    이렇게 취합한 점수표를 바탕으로 이제 result를 출력해야 합니다.

    1번 지표부터 4번지 표까지 순서대로 result에 조건에 맞는 알파벳을 넣습니다.

    let answer = "";
    answer += answerMap['R'] >= answerMap['T'] ? 'R' : 'T';
    answer += answerMap['C'] >= answerMap['F'] ? 'C' : 'F';
    answer += answerMap['J'] >= answerMap['M'] ? 'J' : 'M';
    answer += answerMap['A'] >= answerMap['N'] ? 'A' : 'N';
    return answer;

     

    전체 코드 첨부합니다.

    function solution(survey, choices) {
        const answerMap = {
            'R': 0, 'T' :0, 'C': 0, 'F' :0, 'J' :0, 'M' : 0, 'A' : 0,'N' : 0
        }
        let choiceMap = {1 : 0, 2 : 0, 3 :0, 4 : -1, 5: 1, 6 : 1, 7 : 1}
        let scoreMap = {1 : 3, 2 : 2, 3 :1, 4 : 0, 5: 1, 6 : 2, 7 : 3}
        for(let i=0; i<choices.length; i++){
            if(choices[i] !== 4){
                const choice = choices[i]
                const surveyIndex = choiceMap[choice];
                const type = survey[i][surveyIndex];
                const score = scoreMap[choice];
                answerMap[type] += score;
            }
        }
        let answer = "";
        answer += answerMap['R'] >= answerMap['T'] ? 'R' : 'T';
        answer += answerMap['C'] >= answerMap['F'] ? 'C' : 'F';
        answer += answerMap['J'] >= answerMap['M'] ? 'J' : 'M';
        answer += answerMap['A'] >= answerMap['N'] ? 'A' : 'N';
       return answer; 
        
    }