https://school.programmers.co.kr/learn/courses/30/lessons/118666
survey | choices | result |
---|---|---|
["AN", "CF", "MJ", "RT", "NA"] | [5, 3, 2, 7, 5] | "TCMA" |
["TR", "RT", "TR"] | [7, 1, 3] | "RCJA" |
function solution(survey, choices) {
const result = choices.reduce((acc, curr, i) => {
if (curr === 4) return acc;
if (curr < 4) {
const first_character = survey[i][0];
const score = 4 - curr;
acc[first_character] += score;
return acc;
}
if (curr > 4) {
const second_character = survey[i][1];
const score = curr - 4;
acc[second_character] += score;
return acc;
}
}, {
R: 0,
T: 0,
C: 0,
F: 0,
J: 0,
M: 0,
A: 0,
N: 0,
});
return ['RT', 'CF', 'JM', 'AN'].reduce((acc, curr) => {
const first_character = curr[0];
const second_character = curr[1];
if (result[first_character] < result[second_character]) {
return acc + second_character;
}
if (result[first_character] > result[second_character]) {
return acc + first_character;
}
return acc + first_character;
}, '');
}
총 8가지의 성격 유형이 존재하므로, 이 성격 유형들을 객체의 키로 저장하고 0으로 초기값을 설정한다.
어디에도 해당하지 않는 경우인 모르겠음
은 choices
배열의 가장 중간인 4점에 위치하며, 어떤 성격 유형의 점수에도 영향을 미치지 않으므로 점수를 나누는 기준이 된다.
따라서, 이 점수를 기준으로 하여, 각 문항의 답변에 따라 성격 유형의 점수를 계산한다.
TCJA
, TFJA
등을 만들어야 한다.앞서 정의한 8가지의 성격 유형은 2개씩 4가지의 지표로 나뉘므로, 이를 위한 새 배열을 만든다. => ['RT', 'CF', 'JM', 'AN']
1번에서 만든 객체를 이용해, 지표를 담고 있는 배열에서 순서대로 각 지표에서 더 큰 값. 즉, 더 큰 점수를 갖는 성격 유형을 리턴하도록 한다.
여기서는 지표 배열의 첫번째 성격 유형이 항상 2번째 성격 유형보다 사전 순서에서 앞서 있으므로 항상 첫번째 성격 유형을 리턴하도록 하면 된다.