문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
function solution(survey, choices) {
// 결과 데이터 형태를 미리 객체 형태로 만들어 순서를 통제한다
// 나중에 R-T, C-F, J-M, A-N끼리 어떤 알파벳 점수가 더 높은지 비교해야 하는데 이렇게 미리 만들어두면 나중에 따로 정렬할 필요가 없다
// 두 알파벳의 점수가 동일한 경우에도 R-T, C-F, J-M, A-N에서 왼쪽 알파벳이 우선 순위를 갖게 된다
let result = { R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0 };
let answer = "";
choices.map((choice, index) => {
const surveyTypeArr = survey[index].split("");
// 1번 선택: 매우 비동의 ===> surveyType 왼쪽 알파벳에 3점
// 2번 선택: 비동의 ===> surveyType 왼쪽 알파벳에 2점
// 3번 선택: 약간 비동의 ===> surveyType 왼쪽 알파벳에 1점
// 4번 선택: 점수 없음
// 5-7번 선택: 약간 동의, 동의, 매우 동의 ===> surveyType 오른쪽 알파벳에 1-3점
if (choice === 1) {
result[surveyTypeArr[0]] += 3;
} else if (choice === 2) {
result[surveyTypeArr[0]] += 2;
} else if (choice === 3) {
result[surveyTypeArr[0]] += 1;
} else if (choice > 4) {
result[surveyTypeArr[1]] += choice - 4;
}
});
// 객체를 더 다루기 쉽게 배열 형태로 바꾼다
result = Object.entries(result);
for (let i = 0; i < Object.keys(result).length; i += 2) {
// 요소를 순서대로 2개씩 비교한다
// 왼쪽 알파벳 점수가 더 크거나 같은 경우:
// 왼쪽 알파벳을 테스트 결과에 넣는다
// 그렇지 않은 경우:
// 오른쪽 알파벳을 테스트 결과에 넣는다
if (result[i][1] >= result[i + 1][1]) {
answer += result[i][0];
} else {
answer += result[i + 1][0];
}
}
return answer;
}