function solution(survey, choices) {
let answer = '';
let personality = { 'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0 };
for (let i = 0; i < survey.length; i++) {
if (choices[i] < 4) personality[survey[i][0]] += 4 - choices[i];
if (choices[i] > 4) personality[survey[i][1]] += choices[i] - 4;
}
let keys = Object.keys(personality);
for (let i = 0; i < keys.length - 1; i++) {
if (personality[keys[i]] >= personality[keys[i + 1]]) answer += keys[i];
else answer += keys[i + 1];
i++; // i를 2만큼 뒤로 이동
}
return answer;
}
function solution(survey, choices) {
let MBTI = {};
let types = ['RT', 'CF', 'JM', 'AN'];
// 성격 객체 생성
types.forEach((type) => {
[...type].forEach((t) => MBTI[t] = 0); // value까지 같이 부여해야 만들어짐
});
choices.forEach((choice, i) => {
const [disagree, agree] = survey[i]; // 문자열을 배열 디스트럭쳐링으로 분리
// choice <= 4 ? MBTI[disagree] += Math.abs(choice - 4) : MBTI[agree] += Math.abs(choice - 4);
MBTI[choice <= 4 ? disagree : agree] += Math.abs(choice - 4); // 위 라인 리팩토링
});
// map으로 꺼낼 때 배열 디스트럭쳐링 사용
return types.map(([a, b]) => MBTI[a] < MBTI[b] ? b : a).join('');
}
split 메서드를 줄이기 위해 [...type]으로 변경했다. (다시 이해하면서 푸는 과정에서 리팩토링 흔적이..)
배울 게 많은 코드였다 👍