안녕하세요

프로그래머스 JS [성격 유형 검사하기] 본문

프로그래머스/Lv.1

프로그래머스 JS [성격 유형 검사하기]

sakuraop 2023. 2. 2. 00:12

성격 유형 검사하기 문제 보기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 요약


지표 번호   성격 유형
1번 지표   라이언형(R), 튜브형(T)
2번 지표   콘형(C), 프로도형(F)
3번 지표   제이지형(J), 무지형(M)
4번 지표   어피치형(A), 네오형(N)

 

 
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.

1 매우 비동의
2 비동의
3 약간 비동의
4 모르겠음
5 약간 동의
6 동의
7 매우 동의
 

검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서
더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다.
, 하나의 지표에서 각 성격 유형 점수가 같으면,
두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.
 

survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나입니다.
 

survey[i]의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
survey[i]의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.

문제 풀이

1) 선택지에 따른 점수표를 만듭니다.

  const score = {
    1: -3,
    2: -2,
    3: -1,
    4: 0,
    5: 1,
    6: 2,
    7: 3,
  };

2) 점수를 기록할 판을 만듭니다.

  const result = {
    R: 0,
    T: 0,
    C: 0,
    F: 0,
    J: 0,
    M: 0,
    A: 0,
    N: 0,
  };

3) 점수를 메깁니다.

  choices.forEach((nth, index) => {
    if (nth < 4) {
      result[survey[index][0]] -= score[nth];
    } else {
      result[survey[index][1]] += score[nth];
    }
  });
 
[
  [ 'R', 0 ],
  [ 'T', 3 ],
  [ 'C', 1 ],
  [ 'F', 0 ],
  [ 'J', 0 ],
  [ 'M', 2 ],
  [ 'A', 1 ],
  [ 'N', 1 ]
]​

4) 배열로 만들어 타입별 대소 비교를 합니다.

  const resultArray = Object.entries(result);
[ 'R', 0 ] [ 'T', 3 ]
[ 'C', 1 ] [ 'F', 0 ]
[ 'J', 0 ] [ 'M', 2 ]
[ 'A', 1 ] [ 'N', 1 ]

  let answer = "";

  for (let i = 0; i < 8; i += 2) {
// R,C,J,A 가 크거나 같은가? 를 비교합니다.
    const isFormerTypeBig = resultArray[i][1] >= resultArray[i + 1][1];
 
    if (isFormerTypeBig) {
      answer += resultArray[i][0];
    } else {
      answer += resultArray[i + 1][0];
    }
  }
[ 'R', 0 ] [ 'T', 3 ]
[ 'C', 1 ] [ 'F', 0 ]
[ 'J', 0 ] [ 'M', 2 ]
[ 'A', 1 ] [ 'N', 1 ]
 
  return answer;
}

function solution(survey, choices) {
  let answer = "";

  const score = {
    1: -3,
    2: -2,
    3: -1,
    4: 0,
    5: 1,
    6: 2,
    7: 3,
  };

  const result = {
    R: 0,
    T: 0,
    C: 0,
    F: 0,
    J: 0,
    M: 0,
    A: 0,
    N: 0,
  };

  choices.forEach((nth, index) => {
    if (nth < 4) {
      result[survey[index][0]] -= score[nth];
    } else {
      result[survey[index][1]] += score[nth];
    }
  });

  const resultArray = Object.entries(result);

  for (let i = 0; i < 8; i += 2) {
    if (resultArray[i][1] >= resultArray[i + 1][1]) {
      answer += resultArray[i][0];
    } else {
      answer += resultArray[i + 1][0];
    }
  }

  return answer;
}