본문 바로가기

TIL(today i learned)/프로그래머스-코딩테스트

[프로그래머스][Lv.1] 성격유형 검사하기

처음으로 코딩테스트 문제를 풀어보았다.

기초 문제였지만, 쉽지 않았고, 솔직히 근무시간 내내 씨름했다.

아래는 내가 제출한 답이지만, 테스트 점수를 10점 받아 통과하지 못했다.

function solution(survey, choices) {
    let ans = [], 
        score = [],
        R=[], T=[], C=[], F=[], J=[], M=[], A=[], N=[],
        ans_final = [],
        ans_obj = {R:0, T:0, C:0, F:0, J:0, M:0, A:0, N:0};

    for (i = 0; i < survey.length; i++){
        if (choices[i] < 4) {
            ans.push(survey[i][0]);
            score.push(4-choices[i]);
        } else if (choices[i] > 4){
            ans.push(survey[i][1]);
            score.push(choices[i]-4);
        } else return;
        switch (ans[i]) {
            case 'R':
                R.push(score[i]);
                ans_obj.R = R.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'T':
                T.push(score[i]);
                ans_obj.T = T.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'C':
                C.push(score[i]);
                ans_obj.C = C.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'F':
                F.push(score[i]);
                ans_obj.F = F.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'J':
                J.push(score[i]);
                ans_obj.J = J.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'M':
                M.push(score[i]);
                ans_obj.M = M.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'A':
                A.push(score[i]);
                ans_obj.A = A.reduce((partialSum, a) => partialSum +a, 0);
                break;
            case 'N':
                N.push(score[i]);
                ans_obj.N = N.reduce((partialSum, a) => partialSum +a, 0);
                break;
        }
    }
    
    ans_obj.T > ans_obj.R ? ans_final.push('T') : ans_final.push('R');
    ans_obj.F > ans_obj.C ? ans_final.push('F') : ans_final.push('C');
    ans_obj.M > ans_obj.J ? ans_final.push('M') : ans_final.push('J');
    ans_obj.N > ans_obj.A ? ans_final.push('N') : ans_final.push('A');
         
    let answer = ans_final.reduce((partialSum, a) => partialSum+a, '');
    return answer;
}

 

for 문을 사용한 순환은 사실 map 함수를 통해서 간단하게 처리할 수 있었다.

그리고 다른 사람들의 답을 보니 굉장히 심플하게 풀어서 놀랬다.

좌절이 되기도 했고...(map도 모르는 내가 할 수 있을까? 하는 생각이 잠시 들었다...)

 

다시 JS 문법 강의를 들으면서 내용을 복습해야겠다고 생각했다.

기초가 탄탄하면 멀리 갈 수 있으니까!!

 

화이팅!!

 


아래는 구글 검색을 이용하여 새로 작성한 코드

function solution(survey, choices) {
    var answer = '';
    let ans_obj = {
        'R':0,
        'T':0,
        'C':0,
        'F':0,
        'J':0,
        'M':0,
        'A':0,
        'N':0,
    }
    
    survey.map((value, i) => {
        if(choices[i] < 4) ans_obj[value.substring(0,1)] += 4-choices[i]
        if(choices[i] > 4) ans_obj[value.substring(1,2)] += choices[i] - 4 
    })
    
    ans_obj.R >= ans_obj.T ? answer +='R' : answer +='T';
    ans_obj.C >= ans_obj.F ? answer +='C' : answer +='F';
    ans_obj.J >= ans_obj.M ? answer +='J' : answer +='M';
    ans_obj.A >= ans_obj.N ? answer +='A' : answer +='N';
    return answer;
}