- 문제
- 검사지와 응답지가 배열로 주어지고 둘의 길이는 같음
- 검사지는 RT/TR, CF/FC, JM/MJ, AN/NA 총 8가지로 구성
- 응답지는 1 ~ 7점의 점수로 구성
- 1-3점은 앞문자에 가산, 4-7점은 뒷문자에 가산
- 동점이거나 0점일 경우 알파벳 순서의 앞순서를 선택
- 4문자로 이루어진 결과를 리턴하자
- 수도코드
- 결과
function solution(survey, choices) {
var answer = '';
let cnt = [0,0,0,0,0,0,0,0];
for (let i = 0; i < survey.length; i++) {
if (survey[i] === 'RT') {
if (choices[i] === 1) {
cnt[0] = cnt[0] + 3;
}
if (choices[i] === 2) {
cnt[0] = cnt[0] + 2;
}
if (choices[i] === 3) {
cnt[0] = cnt[0] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[1] = cnt[1] + 1;
}
if (choices[i] === 6) {
cnt[1] = cnt[1] + 2;
}
if (choices[i] === 7) {
cnt[1] = cnt[1] + 3;
}
}
if (survey[i] === 'TR') {
if (choices[i] === 1) {
cnt[1] = cnt[1] + 3;
}
if (choices[i] === 2) {
cnt[1] = cnt[1] + 2;
}
if (choices[i] === 3) {
cnt[1] = cnt[1] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[0] = cnt[0] + 1;
}
if (choices[i] === 6) {
cnt[0] = cnt[0] + 2;
}
if (choices[i] === 7) {
cnt[0] = cnt[0] + 3;
}
}
if (survey[i] === 'CF') {
if (choices[i] === 1) {
cnt[2] = cnt[2] + 3;
}
if (choices[i] === 2) {
cnt[2] = cnt[2] + 2;
}
if (choices[i] === 3) {
cnt[2] = cnt[2] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[3] = cnt[3] + 1;
}
if (choices[i] === 6) {
cnt[3] = cnt[3] + 2;
}
if (choices[i] === 7) {
cnt[3] = cnt[3] + 3;
}
}
if (survey[i] === 'FC') {
if (choices[i] === 1) {
cnt[3] = cnt[3] + 3;
}
if (choices[i] === 2) {
cnt[3] = cnt[3] + 2;
}
if (choices[i] === 3) {
cnt[3] = cnt[3] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[2] = cnt[2] + 1;
}
if (choices[i] === 6) {
cnt[2] = cnt[2] + 2;
}
if (choices[i] === 7) {
cnt[2] = cnt[2] + 3;
}
}
if (survey[i] === 'JM') {
if (choices[i] === 1) {
cnt[4] = cnt[4] + 3;
}
if (choices[i] === 2) {
cnt[4] = cnt[4] + 2;
}
if (choices[i] === 3) {
cnt[4] = cnt[4] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[5] = cnt[5] + 1;
}
if (choices[i] === 6) {
cnt[5] = cnt[5] + 2;
}
if (choices[i] === 7) {
cnt[5] = cnt[5] + 3;
}
}
if (survey[i] === 'MJ') {
if (choices[i] === 1) {
cnt[5] = cnt[5] + 3;
}
if (choices[i] === 2) {
cnt[5] = cnt[5] + 2;
}
if (choices[i] === 3) {
cnt[5] = cnt[5] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[4] = cnt[4] + 1;
}
if (choices[i] === 6) {
cnt[4] = cnt[4] + 2;
}
if (choices[i] === 7) {
cnt[4] = cnt[4] + 3;
}
}
if (survey[i] === 'AN') {
if (choices[i] === 1) {
cnt[6] = cnt[6] + 3;
}
if (choices[i] === 2) {
cnt[6] = cnt[6] + 2;
}
if (choices[i] === 3) {
cnt[6] = cnt[6] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[7] = cnt[7] + 1;
}
if (choices[i] === 6) {
cnt[7] = cnt[7] + 2;
}
if (choices[i] === 7) {
cnt[7] = cnt[7] + 3;
}
}
if (survey[i] === 'NA') {
if (choices[i] === 1) {
cnt[7] = cnt[7] + 3;
}
if (choices[i] === 2) {
cnt[7] = cnt[7] + 2;
}
if (choices[i] === 3) {
cnt[7] = cnt[7] + 1;
}
if (choices[i] === 4) {
continue;
}
if (choices[i] === 5) {
cnt[6] = cnt[6] + 1;
}
if (choices[i] === 6) {
cnt[6] = cnt[6] + 2;
}
if (choices[i] === 7) {
cnt[6] = cnt[6] + 3;
}
}
}
if (cnt[0] >= cnt[1]) {
answer = answer + 'R';
}
if (cnt[0] < cnt[1]) {
answer = answer + 'T';
}
if (cnt[2] >= cnt[3]) {
answer = answer + 'C';
}
if (cnt[2] < cnt[3]) {
answer = answer + 'F';
}
if (cnt[4] >= cnt[5]) {
answer = answer + 'J';
}
if (cnt[4] < cnt[5]) {
answer = answer + 'M';
}
if (cnt[6] >= cnt[7]) {
answer = answer + 'A';
}
if (cnt[6] < cnt[7]) {
answer = answer + 'N';
}
return answer;
}
- 상당히 무식하게 풀었다
- 모든 유형을 if문으로 분기하여 점수를 계산했다
- 레퍼런스
function solution(survey, choices) {
const MBTI = {};
const types = ["RT","CF","JM","AN"];
types.forEach((type) =>
type.split('').forEach((char) => MBTI[char] = 0)
)
choices.forEach((choice, index) => {
const [disagree, agree] = survey[index];
MBTI[choice > 4 ? agree : disagree] += Math.abs(choice - 4);
});
return types.map(([a, b]) => MBTI[b] > MBTI[a] ? b : a).join("");
}
- 다른 사람의 응답 중 가장 좋았다고 생각되는 답안을 가져왔다
- 아직 이해를 다 못하였다, 풀이를 공부를 해봐야겠다
- forEach, map을 활용한 풀이를 고민해야겠다, 대부분의 심플한 답안들은 앞의 2가지를 활용한 풀이를 작성하였음