풀이 시간 : 19분 27초
1. 직관적인 변수명 사용하기
2. Math.abs() 절대값을 통해 값 계산하는 유형 파악
-> 이외에도 count ++ -- 로 균형을 이루는 계산도 있음
3. flatMap() 메서드의 활용
4. 구조분해할당의 활용
5. 배열을 활용한 Object, Map, Set 객체 선언
function solution(survey, choices) {
const arr = [
"R","T",
"C","F",
"J","M",
"A","N",
]; // 성격 지표
const scores = new Map(arr.map(key => [key, 0])); // 성격 지표 점수
const points = ["", 3, 2, 1, 0, 1, 2, 3]; // 점수 환산
for(const [i, pair] of survey.entries()){
const choice = choices[i]; // 선택지
const point = points[choice]; // 반영 점수
const [key1, key2] = pair; // key값 반영
if(choice < 4){ // 점수 반영하기
scores.set(key1, scores.get(key1) + point);
}else if(choice > 4 ){
scores.set(key2, scores.get(key2) + point);
}
}
let result = "";
result += scores.get("R") >= scores.get("T") ? "R" : "T";
result += scores.get("C") >= scores.get("F") ? "C" : "F";
result += scores.get("J") >= scores.get("M") ? "J" : "M";
result += scores.get("A") >= scores.get("N") ? "A" : "N";
return result;
}
성격 유형별 점수를 계산하고, 최종적으로 더 높은 점수를 가진 항목을 선택하여, 성격유형을 선택하는 문제입니다. 성격 지표 점수를 반영할 Map 객체를 만들고, survey 를 순회하면서, 선택한 점수를 반영하고, 최종적으로 선택된 결과를 반환하는 문제입니다.
function solution(survey, choices) {
const MBTIs = ["RT","CF","JM","AN"]; // MBTI 유형들
const scores = new Map(MBTIs.flatMap(([key1, key2]) => [[key1, 0], [key2, 0]])); // 점수 반영
for(const [i, MBTI] of survey.entries()){ // 검사 반영
const choice = choices[i]; // 검사결과
const [key1, key2] = MBTI;
if(choice < 4) {
scores.set(key1, scores.get(key1) + Math.abs(choice - 4));
}else if(choice > 4){
scores.set(key2, scores.get(key2) + Math.abs(choice - 4));
}
}
return MBTIs
.map(([key1, key2]) => scores.get(key1) >= scores.get(key2) ? key1 : key2)
.join("");
}
변수명을 더 직관적인 이름인 MBTI로 변경하여 코드의 가독성을 높였으며, 중복 코드를 map 메서드를 활용해 제거했습니다. 또한, 점수 계산은 Math.abs()를 사용하여 간단하고 직관적으로 개선했습니다.