나의 풀이
function solution(survey, choices) {
const scores = getScoresByPersonalityType(survey, choices);
const resultOfPersonalityTypeTest = calculateScores(scores);
return resultOfPersonalityTypeTest;
}
function getScoresByPersonalityType(survey, choices) {
// 성격 유형별 점수
const scores = {
R: 0,
T: 0,
C: 0,
F: 0,
J: 0,
M: 0,
A: 0,
N: 0,
};
for (let i = 0; i < survey.length; i++) {
// 모르겠다로 응답했으면 점수 계산 할 필요가 없다.
// 따라서 4가 나오면 굳이 for문을 다 실행시킬 필요없이 바로 다음index로
if (choices[i] === 4) continue;
// 비동의쪽으로 응답했을 때
if (choices[i] < 4) {
// survey 왼쪽 캐릭터의 점수를 4 - choices[i] 만큼 올린다.
// 매우 비동의 : 3점, 비동의 : 2점, 약간 비동의 : 1점이기에 4 - choices[i]를 해줌
scores[survey[i][0]] += 4 - choices[i];
} else {
// 동의쪽으로 응답했을 때
scores[survey[i][1]] += choices[i] - 4;
}
}
// 계산된 scores 객체 return
return scores;
}
function calculateScores(scores) {
let result = ''; // 성격 유형 테스트 결과
// 1번 지표, 2번 지표, 3번 지표, 4번 지표 순서대로 배열 생성
const order = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'];
// n번 지표에서 점수가 더 큰 성격 유형을 result에 넣기
for (let i = 0; i < order.length; i += 2) {
// n번 지표에서 성격 유형 점수가 같을 때
if (scores[order[i]] === scores[order[i + 1]]) {
// 사전 순으로 빠른 성격 유형을 검사자의 성격 유형으로 판단
const min = Math.min(order[i].charCodeAt(), order[i].charCodeAt());
result += String.fromCharCode(min);
continue;
}
// n번 지표에서 성격 유형 검사 점수들이 크거나 작을 때
// 점수가 더 큰 성경 유형을 결과에 반영
scores[order[i]] > scores[order[i + 1]]
? (result += order[i])
: (result += order[i + 1]);
}
return result;
}
다른 사람 풀이
function solution(survey, choices) {
let answer = '';
const obj = {
'R': 0,
'T': 0,
'C': 0,
'F': 0,
'J': 0,
'M': 0,
'A': 0,
'N': 0
}
const aplph = survey.map((v, i) => {
if(choices[i] > 4) obj[v.substring(1,2)] += choices[i] - 4
if(choices[i] < 4) obj[v.substring(0,1)] += 4 - choices[i]
})
obj['R'] >= obj['T'] ? answer +='R' : answer += 'T';
obj['C'] >= obj['F'] ? answer +='C' : answer += 'F';
obj['J'] >= obj['M'] ? answer +='J' : answer += 'M';
obj['A'] >= obj['N'] ? answer +='A' : answer += 'N';
return answer;
}
와 마지막에 obj['R'] >= obj['T'] 를 해주면 필자의 코드처럼 유니코드를 사용할 필요가없다.
더 빠른 캐릭터를 앞쪽에다 배치시켜서 같은 때는 앞쪽이 선택되어지게끔 하면 조금더 간단한 코드가 된다.
또한 성격 타입이 4쌍이라서 그렇게 많지 않으니 배열에넣어서 순회를 돌리는 등 보다 그냥 반복이 있더라도 이런식으로
나열하는 것도 괜찮은 것 같다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 신고 결과 받기 📌 (1) | 2023.06.07 |
---|---|
[프로그래머스-JS] level.2 요격 시스템 📌 (0) | 2023.06.02 |
[프로그래머스 - JS] level.1 개인정보 수집 유효기간 (0) | 2023.05.30 |
[프로그래머스] level.2 가장 큰수 😱 (0) | 2023.05.26 |
[프로그래머스] level.3 베스트앨범 (0) | 2023.05.25 |