[프로그래머스] 성격 유형 검사하기 (2022 KAKAO TECH INTERNSHIP)
2022. 12. 29. 16:59ㆍ기록/Programmers
- 목차
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 문제 풀이
function solution(survey, choices) {
let answer = '';
const types = ['RT', 'CF', 'JM', 'AN'];
const score = { R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0 };
choices.forEach((choice, idx) => {
const [disagree, agree] = survey[idx];
score[choice > 4 ? agree : disagree] += Math.abs(choice - 4);
});
types.forEach((type) => {
const [first, second] = type;
answer += score[first] < score[second] ? second : first;
});
return answer;
}
- 성격유형 타입들을 미리 배열에 넣어놓음
- 각 요소의 문자는 사전 상 빠른 순으로 들어 있음
- 각 성격유형과 점수 0을 가진 객체를 미리 만들어놓음
- survey와 choices의 길이는 같음
- survey에서 choices의 인덱스로 값을 찾음
- ex) 'RT'
- 구조 분해 할당으로 비동의, 동의 변수 값을 초기화함
- ex) [disagree, agree] = 'RT'
- disagree === 'R'
- agree === 'T'
- 선택한 문항이 4보다 클 경우 동의 문항, 작을 경우 비동의 문항
- 문항 - 4 를 절대값으로 변환한 값을 누적함 (해당 문항의 점수)
- 선택학 문항이 4일 경우 Math.abs(4 - 4) 로 0이 되기 때문에 상관없음
- 성격유형 타입들을 하나씩 꺼냄
- 구조 분해 할당으로 첫번째, 두번째 변수 값을 초기화함
- 두번째 값이 더 클 경우 두번째 key를 정답 변수에 누적
- 첫번째 값이 더 클 경우 첫번째 key를 정답 변수에 누적
- 두 값이 같을 경우 첫번째 key를 정답 변수에 누적
- type 문자열의 각 문자는 사전 상 빠른 순으로 들어있음
- 항상 첫번째 변수가 사전 상 더 빠른 순서임
- survey에서 choices의 인덱스로 값을 찾음
다른 사람의 문제 풀이
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("");
}
function solution(survey, choices) {
const data = { R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0 };
for (let i = 0; i < survey.length; i++) {
const score = choices[i] - 4;
let type = survey[i].split('')[score < 0 ? 0 : 1] ;
data[type] += Math.abs(score);
}
const { R, T, C, F, J, M, A, N } = data;
return `${R >= T ? 'R' : 'T'}${C >= F ? 'C' : 'F'}${J >= M ? 'J' : 'M'}${A >= N ? 'A' : 'N'}`;
}