본문 바로가기
코테

[JS] 성격 유형 검사 (해설포함)

by zenna 2024. 4. 10.
728x90
테스트케이스 최대 소요시간 : 0.31ms

 

문제 요약

// survey = 문제별 점수 해당 유형
// choices = 선택된 답변

 

제출답안

function solution(survey, choices) {
    let addingText = {R:0, T:0, C:0, F:0, J:0, M:0, A:0, N:0 } ;

    choices.forEach((choice, index)=>{
        switch(choice){
            case 1 : addingText[ survey[index][0] ] += 3; break;
            case 2 : addingText[ survey[index][0] ] += 2; break;
            case 3 : addingText[ survey[index][0] ] += 1; break;
            case 5 : addingText[ survey[index][1] ] += 1; break;
            case 6 : addingText[ survey[index][1] ] += 2; break;
            case 7 : addingText[ survey[index][1] ] += 3; break;
        }
    })
    let answer = '';
    
    answer += (addingText["R"] < addingText["T"]) ? "T" : "R" ;
    answer += (addingText["C"] < addingText["F"]) ? "F" : "C" ;
    answer += (addingText["J"] < addingText["M"]) ? "M" : "J" ;
    answer += (addingText["A"] < addingText["N"]) ? "N" : "A" ;
    
    return answer;
}

 

문제해설

function solution(survey, choices) {
    let addingText = {R:0, T:0, C:0, F:0, J:0, M:0, A:0, N:0 } ;
		// 답변의 점수를 합산할 map. R이 3점인 답을 고른 경우 addingText[R] += 3
    choices.forEach((choice, index)=>{ // 답변을 전체순회
        switch(choice){
        	// 답변이 1,2,3 인 경우 survey 어레이의 같은 index에서 앞글자를 찾아
			// addingText에서 이름이 동일한 키를 찾아 가산점수를 더해줍니다.
            // 답변이 5,6,7 인경우 위와 같되, 뒷글자를 찾아 더해줍니다.
            case 1 : addingText[ survey[index][0] ] += 3; break; 
            case 2 : addingText[ survey[index][0] ] += 2; break;
            case 3 : addingText[ survey[index][0] ] += 1; break;
            case 5 : addingText[ survey[index][1] ] += 1; break;
            case 6 : addingText[ survey[index][1] ] += 2; break;
            case 7 : addingText[ survey[index][1] ] += 3; break;
        }
    });
    // 순회문이 종료되며, 각 문자별 점수가 addingText에 저장되어 있습니다.
    let answer = '';
    // 리턴할 유형 추출. 점수가 동일한 경우 앞글자를 가져오도록 합니다
    answer += (addingText["R"] < addingText["T"]) ? "T" : "R" ;
    answer += (addingText["C"] < addingText["F"]) ? "F" : "C" ;
    answer += (addingText["J"] < addingText["M"]) ? "M" : "J" ;
    answer += (addingText["A"] < addingText["N"]) ? "N" : "A" ;
    
    return answer;
}

 

제일 좋아요가 많은 답변은 로직은 같았지만, swtich문으로 표현한 부분을 (제출답안 5~12라인)

addingText[choice > 4 ? survey[index][0] : survey[index][1] ] += Math.abs(choice - 4);

라고 한줄로 표현했고, 

리턴할 answer를 추출하는 구문을 (제출답안 14~21 라인)

const types = ["RT","CF","JM","AN"];
return types.map(([a, b]) => addingText[b] > addingText[a] ? b : a).join("");

라고 짜두어 간결했다. 다만 소요 시간은 로직 없이 확인만 거치는 내 코드가 더 짧았다. 

 

#99클럽 #99일지 #코딩테스트 #개발자스터디 #항해 #TIL

 

728x90

'코테' 카테고리의 다른 글

[JS] 시저 암호  (0) 2024.04.15
[Java] 정수 제곱근 판별  (0) 2024.04.11
[java] 붕대감기 (해설포함)  (1) 2024.04.09
[Java] 없는 숫자 더하기  (0) 2024.04.08
[JS] 나누어 떨어지는 숫자 배열  (0) 2024.04.07

댓글