개발일지
프로그래머스 - 성격 유형 검사하기 (Javascript) 본문
접근방법
1. 모든 성격 유형에 0점을 매기고 시작하기
2. survey에 들어있는 2개의 성격 유형을 한 개로 나누기
3. 각 유형에 맞게 점수 매기기
4. 지표 번호 순으로 성격 나열하기
구현
function solution(survey, choices) {
let answer = [];
// 각 성격마다 점수를 추가할 수 있도록 Map 사용
const kbti = new Map();
// 문항 선택에 따른 점수 구분 -> 배열의 첫 요소로 0을 넣은 이유는 문항에는 0번 문항이 없기 때문
const scoreList = [0, 3, 2, 1, 0, 1, 2, 3];
// 각 성격 유형당 0점을 매기고 시작
["R", "T", "C", "F", "J", "M", "A", "N"].forEach((item) => {
kbti.set(item, {
score: 0,
});
});
// 2개씩 붙어있는 성격 유형을 하나씩 구분하고, 각 유형에 선택 문항 점수를 추가해주기
survey.forEach((item, index) => {
const character = item.split("");
const score = choices[index];
// 선택 문항이 4 이하인 경우 첫번째 성격 유형에 점수 추가
// 선택 문항이 4인 경우는 0을 더하므로 상관 X
choices[index] <= 4
? kbti.set(character[0], {
score: kbti.get(character[0]).score + scoreList[score],
})
// 선택 문항이 4 초과인 경우 첫번째 성격 유형에 점수 추가
: kbti.set(character[1], {
score: kbti.get(character[1]).score + scoreList[score],
});
});
// Map에 저장되어 있는 것들을 배열화하고, 같은 지표에 있는 성격끼리 점수를 비교하여 answer 배열에 추가
// 같은 경우 먼저 오는 성격을 추가하는데, 8번 라인의 코드에서 순서를 지정했음
for (let i = 0; i < kbti.size; i += 2) {
[...kbti][i][1].score >= [...kbti][i + 1][1].score
? answer.push([...kbti][i][0])
: answer.push([...kbti][i + 1][0]);
}
// 배열의 요소들을 한줄의 string으로 나열
return answer.join("");
}
'개발일지 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 위장 (Javascript) (0) | 2022.08.30 |
---|---|
프로그래머스 - K번째수 (JavaScript, JS) (0) | 2021.08.05 |
프로그래머스 - 나머지 한 점 (JavaScript) (0) | 2021.07.29 |
프로그래머스 - 크레인 인형뽑기 (JS) (0) | 2021.06.24 |