코딩테스트

[JS] 2022 KAKAO TECH INTERNSHIP > 성격 유형 검사하기

차차한 2022. 8. 22. 14:51
function solution(survey, choices) {
    var answer = '';
    var arr = [0,3,2,1,0,1,2,3];
    var map = new Map();
    map.set("R", 0);
    map.set("T", 0);
    map.set("C", 0);
    map.set("F", 0);
    map.set("J", 0);
    map.set("M", 0);
    map.set("A", 0);
    map.set("N", 0);
    
    for(var i = 0; i < survey.length; i++){
        
        var first = survey[i].charAt(0); //A, C, M, R, N
        var second = survey[i].charAt(1);
        
        if(choices[i] < 4){
            var a = arr[choices[i]];
            map.set(first, map.get(first) + a);
        }else{
            var b = arr[choices[i]];
            map.set(second, map.get(second) + b);
        }        
    }
    
    if(map.get("R") > map.get("T") || map.get("R") == map.get("T")){
        answer += "R"
    }else{
        answer += "T"
    }
     
    if(map.get("C") > map.get("F") || map.get("C") == map.get("F")){
        answer += "C"
    }else{
        answer += "F"
    }
    
    if(map.get("J") > map.get("M") || map.get("J") == map.get("M")){
        answer += "J"
    }else{
        answer += "M"
    }
    
    if(map.get("A") > map.get("N") || map.get("A") == map.get("N")){
        answer += "A"
    }else{
        answer += "N"
    }

    return answer;
}

가장 최근 문제를 풀어봤다

푼 사람이 약 900명밖에 되지 않으니 질문하기에서도 뭐 찾아볼만한 내용이 없어서 정말 1부터 10까지 혼자 풀어냈다.

하드코딩으로 풀어내서 아쉬움이 남는 문제

 

    var arr = [0,3,2,1,0,1,2,3];
    var map = new Map();
    map.set("R", 0);
    map.set("T", 0);
    map.set("C", 0);
    map.set("F", 0);
    map.set("J", 0);
    map.set("M", 0);
    map.set("A", 0);
    map.set("N", 0);

arr 변수에는 답에 따른 점수를 배열로 만들어 저장했다.

0번 인덱스에 0은 순서맞추려고 임의로 넣은 숫자.. ㅎㅎ

만약에 1번 문제에서 3이라 답하면 arr[3]을 해서 점수 1을 가져오는 식으로 만들었다.

 

각 성격 유형은 map에 담아 key-value로 저장했고 점수를 비교해 점수가 큰 쪽의 key를 찾아 값을 더해주면 되겠다는 생각으로 문제를 풀었다.

 

    for(var i = 0; i < survey.length; i++){
        
        var first = survey[i].charAt(0); //A, C, M, R, N
        var second = survey[i].charAt(1);
        
        if(choices[i] < 4){
            var a = arr[choices[i]];
            map.set(first, map.get(first) + a);
        }else{
            var b = arr[choices[i]];
            map.set(second, map.get(second) + b);
        }        
    }

답변의 길이만큼 반복문을 돌렸다.

first, second 변수에는 각각 첫 번째 문자, 두 번째 문자를 담아줬다.

조건문에서 답변이 4보다 작으면 첫 번째 문자에 점수를 더해야 하니 arr[choice[i]]로 해당 점수를 찾고 map에서 키를 찾아 원래 있던 값에 점수를 더해줬다.

4보다 크면 두 번째 문자에 점수를 더해줬다.

 

if(map.get("R") > map.get("T") || map.get("R") == map.get("T")){
        answer += "R"
    }else{
        answer += "T"
    }
     
    if(map.get("C") > map.get("F") || map.get("C") == map.get("F")){
        answer += "C"
    }else{
        answer += "F"
    }
    
    if(map.get("J") > map.get("M") || map.get("J") == map.get("M")){
        answer += "J"
    }else{
        answer += "M"
    }
    
    if(map.get("A") > map.get("N") || map.get("A") == map.get("N")){
        answer += "A"
    }else{
        answer += "N"
    }

하드코딩...;;

R의 value가 T의 value보다 크거나 같으면 answer에 R을 더해줬다. 이런 식으로 계속 반복..

생각해보니 왜 저렇게 썼는지.. ? 그냥 >= 로 쓰면 됐을 텐데 ... -.-

다른 분이 쓴 거에서는 삼항연산자로 깔끔하게 썼다!

훨씬 가독성있다