ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 성격 유형 검사하기
    Algorithm 2023. 5. 23. 15:18

     

    문제

     

    풀이

    성격 유형의 디폴트 값을 'RCJA'로 지정해준다

    각 성격유형 쌍을 이루는 배열 ['RT', 'CF', 'JM', 'AN'] 과 이 배열에 매칭되는 [0, 0, 0, 0] 배열을 선언해준다. 이 배열은 각 인덱스의 값이 음수일 경우 각각 [R, C, J, A] 양수일 경우 [T, F, M, N]을 표현한다

    survey 배열을 순회하며 survey[i]에 매칭되는 choices[i]의 값이 4보다 클경우 즉, 동의를 선택한 경우와 비동의를 선택한 경우 두가지로 나눈다

    이 때 survey[i]의 값이 typeArr에 존재하는 값이라면 즉, 정렬이 되어 있는 상태라면 survey[i]에 매칭되는 typeNum의 인덱스에 choices[i]-4 를 더해준다

    반면 survey[i]의 값이 typeArr에 존재하지 않는 값 즉, 정렬이 되어 있지 않다면 survey[i]를 뒤집은 뒤 해당 값에 매칭되는 typeNum의 인덱스에 choices[i]-4 를 빼준다

    마지막으로 typeNum를 순회하며 각 인덱스의 값이 양수라면 디폴트값을 변경해준다

    function solution(survey, choices) {
        // 초기값
        let answer = 'RCJA';
        let typeArr = ['RT', 'CF', 'JM', 'AN'];
        let typeNum = [0, 0, 0, 0];
        
        for(let i = 0; i < survey.length; i++){
            // 동의를 선택한 경우
            if(choices[i] > 4) {
                // survey의 값이 typeArr에 존재하는 값이라면 즉, 정렬된 경우
                if(typeArr.includes(survey[i]))
                    typeNum[typeArr.indexOf(survey[i])] += choices[i]-4;
                // 존재하지 않는다면 즉, 정렬되어 있지 않은 경우
                else
                    typeNum[typeArr.indexOf(survey[i].split('').reverse().join(''))] -= choices[i] - 4;
            }
            // 비동의를 선택한 경우
            else {
                if(typeArr.includes(survey[i]))
                    typeNum[typeArr.indexOf(survey[i])] += choices[i] - 4;
                else
                    typeNum[typeArr.indexOf(survey[i].split('').reverse().join(''))] -= choices[i] - 4;
            }
        }
        
        // 각 인덱스 값이 양수라면 디폴트값 변경
        for(let i = 0; i < typeNum.length; i++){
            if(typeNum[i] > 0) answer = answer.replace(typeArr[i][0], typeArr[i][1]);
        }
        
        return answer;
    }
Designed by Tistory.