문제를 푸는 것 자체는 간단했고 어떻게 최대한 자동화한 코드로 만들 수 있을까 고민했던 문제다.
문제를 간단하게 풀기 위해서는 성격 유형을 담아둔 배열이 필요하다고 생각하여 배열 types를 선언해 주었고 map에 설문 결과를 담아 같은 성격 유형끼리 비교하는 방식으로 문제를 해결했다.
function solution(survey, choices) {
var answer = '';
let map = new Map();
const types = ["RT","CF","JM","AN"]
//타입들을 담아둔 types에 담긴 내용들로 map 내용물 생성
for(var i=0; i<types.length ; i++){
map.set(types[i].split('')[0],0)
map.set(types[i].split('')[1],0)
}
//설문 내용을 map에 기록
for(var i=0 ; i<survey.length ; i++){
var a = survey[i].split('')[0]
var b = survey[i].split('')[1]
if(choices[i]<4){
map.set(a,map.get(a) + 4-choices[i])
}else if(choices[i]>4){
map.set(b,map.get(b) + choices[i]-4)
}
}
//정답내용 기록
for(var i=0; i<types.length ; i++){
var a = types[i].split('')[0]
var b = types[i].split('')[1]
answer += pushAnswer(map,a,b)
}
return answer;
}
//answer에 정답 내용 기록하는 함수
const pushAnswer = (map,a,b) => map.get(a)<map.get(b) ? b:a
마지막에 정답을 넣을때 편하게 하기 위해서 같은 종류의 성격끼리는 묶어두는 방식으로 types를 등록해두고 필요할때 split('')을 통해서 나눠쓰는 방식으로 진행했다.
설문 내용을 map에 기록할 때는 점수의 배치가
a 3점
a 2점
a 1점
점수 X
b 1점
b 2점
b 3점
이렇게 순차적으로 되어있다는 점을 이용하여 choices[i]의 크기에 따라
4-choices[i] 또는 choices[i]-4
로 지정해 줘서 간단하게 설문 결과를 기록하도록 했다.
마지막에는 기록된 설문 내용을 보고 삼항연산자를 통해 어떤 성격 유형인지 판단하여 answer에 넣어주는 것으로 문제를 해결했다.