choices의 값에 따라 switch문을 돌린다.
해당 유형의 점수를 저장하는 객체 result에 반영한다.
result객체에서 성격 유형별 점수를 비교해 answer를 만든다.
function solution(survey, choices) {
var answer = '';
var result = {};
for (i = 0; i < choices.length; i++) {
switch (choices[i]) {
case 1:
var e = survey[i][0];
if (result[e]) result[e] += 3;
else result[e] = 3;
break;
case 2:
var e = survey[i][0];
if (result[e]) result[e] += 2;
else result[e] = 2;
break;
case 3:
var e = survey[i][0];
if (result[e]) result[e] += 1;
else result[e] = 1;
break;
case 4:
break;
case 5:
var e = survey[i][1];
if (result[e]) result[e] += 1;
else result[e] = 1;
break;
case 6:
var e = survey[i][1];
if (result[e]) result[e] += 2;
else result[e] = 2;
break;
case 7:
var e = survey[i][1];
if (result[e]) result[e] += 3;
else result[e] = 3;
break;
default:
break;
}
}
result['R'] < result['T'] ? answer += 'T' : answer += 'R';
result['C'] < result['F'] ? answer += 'F' : answer += 'C';
result['J'] < result['M'] ? answer += 'M' : answer += 'J';
result['A'] < result['N'] ? answer += 'N' : answer += 'A';
return answer;
}
=> 한번도 선택되지 않은 성격 유형의 경우 점수가 undefined로 나오게 되는데, undefined에 비교 연산을 수행하면 항상 false가 나온다고 한다. 이것 때문에 계속 틀렸다.
function solution(survey, choices) {
var answer = '';
var result = {'R':0, 'T':0, 'C':0, 'F':0, 'J':0, 'M':0, 'A':0, 'N':0};
for (i = 0; i < choices.length; i++) {
switch (choices[i]) {
case 1:
var e = survey[i][0];
result[e] += 3;
break;
case 2:
var e = survey[i][0];
result[e] += 2;
break;
case 3:
var e = survey[i][0];
result[e] += 1;
break;
case 4:
break;
case 5:
var e = survey[i][1];
result[e] += 1;
break;
case 6:
var e = survey[i][1];
result[e] += 2;
break;
case 7:
var e = survey[i][1];
result[e] += 3;
break;
default:
break;
}
}
// undefined 는 NAN으로 변환 후 연산하기 때문에 항상 false를 반환한다
result['R'] < result['T'] ? answer += 'T' : answer += 'R';
result['C'] < result['F'] ? answer += 'F' : answer += 'C';
result['J'] < result['M'] ? answer += 'M' : answer += 'J';
result['A'] < result['N'] ? answer += 'N' : answer += 'A';
return answer;
}
=> 유형 점수가 undefined가 나오지 않도록 초기 값을 0으로 초기화한다.
초기값이 모두 0이므로 switch문 안에서 점수가 있는지 확인하는 구문을 제거했다.
function solution(survey, choices) {
const MBTI = {};
const types = ["RT","CF","JM","AN"];
// MBTI 객체 초기화
types.forEach((type) =>
type.split('').forEach((char) => MBTI[char] = 0)
)
choices.forEach((choice, index) => {
// 구조분해 할당을 통해 disagree와 agree를 초기화
const [disagree, agree] = survey[index];
// 선택이 4 이상이면 동의, 아니면 비동의 유형에 점수를 추가한다
MBTI[choice > 4 ? agree : disagree] += Math.abs(choice - 4);
});
// map 메서드를 통해 일괄적으로 처리
return types.map(([a, b]) => MBTI[b] > MBTI[a] ? b : a).join("");
}
=> 다른사람의 풀이이다. 주석은 내가 임의로 달았다.
구조분해할당, map함수 등 js의 기능을 적극적으로 사용한 부분이 인상깊다.
'일기' 카테고리의 다른 글
(JavaScript) 바탕화면 정리 (0) | 2024.12.18 |
---|---|
라우팅 (0) | 2024.12.16 |
Classless Inter Domain Routing(CIDR) (0) | 2024.12.15 |
Classful IP Addressing (0) | 2024.12.14 |
IP주소 (0) | 2024.12.14 |