A.P - 성격 유형 검사(프로그래머스, L1)

EBinY·2022년 9월 1일
0

AP - Algorithm Problem

목록 보기
49/55
  1. 문제
  • 검사지와 응답지가 배열로 주어지고 둘의 길이는 같음
  • 검사지는 RT/TR, CF/FC, JM/MJ, AN/NA 총 8가지로 구성
  • 응답지는 1 ~ 7점의 점수로 구성
  • 1-3점은 앞문자에 가산, 4-7점은 뒷문자에 가산
  • 동점이거나 0점일 경우 알파벳 순서의 앞순서를 선택
  • 4문자로 이루어진 결과를 리턴하자
  1. 수도코드
// 검사지 선택값에 따라 4가지 지표의 2분류 중 1가지가 선택됨
// 2분류 중 점수가 높은 1가지를 초이스하고 엔서에 붙이는 방식으로 함
// 지표는 순서가 정해져 있음
// 서베이의 지표값이 정방/역방 2가지를 가지므로 총 8가지로 분류함
// 각 분류별 점수에 따라 8개의 지표에 점수를 더하고
// 같은 지표의 2분류끼리 마지막에 비교하여 높은 점수를 엔서에 붙여서 리턴하자
// 각 지표를 저장할 8길이의 카운터 배열을 생성
// 각각의 값은 R,T,C,F,J,M,A,N 을 의미하자
// 반복문을 통해 서베이의 지표를 조회하고 지표별 점수에 따른 배점을 하자
// 총 8분류(RT/TR, CF/FC, JM/MJ, AN/NA)
// 7가지 점수 별 해당하는 포인트에 따라 카운터에 점수 배점
// 각 배점에 따라 엔서에 유형을 부여하고 리턴하자
  1. 결과
function solution(survey, choices) {
    var answer = '';
    let cnt = [0,0,0,0,0,0,0,0];
    for (let i = 0; i < survey.length; i++) {
        if (survey[i] === 'RT') {
            if (choices[i] === 1) {
               cnt[0] = cnt[0] + 3;
            }
            if (choices[i] === 2) {
                cnt[0] = cnt[0] + 2;
            }
            if (choices[i] === 3) {
                cnt[0] = cnt[0] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[1] = cnt[1] + 1;
            }
            if (choices[i] === 6) {
                cnt[1] = cnt[1] + 2;
            }
            if (choices[i] === 7) {
                cnt[1] = cnt[1] + 3;
            }
        }
        if (survey[i] === 'TR') {
            if (choices[i] === 1) {
                cnt[1] = cnt[1] + 3;
            }
            if (choices[i] === 2) {
                cnt[1] = cnt[1] + 2;
            }
            if (choices[i] === 3) {
                cnt[1] = cnt[1] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[0] = cnt[0] + 1;
            }
            if (choices[i] === 6) {
                cnt[0] = cnt[0] + 2;
            }
            if (choices[i] === 7) {
                cnt[0] = cnt[0] + 3;
            }
        }
        if (survey[i] === 'CF') {
            if (choices[i] === 1) {
                cnt[2] = cnt[2] + 3;
            }
            if (choices[i] === 2) {
                cnt[2] = cnt[2] + 2;
            }
            if (choices[i] === 3) {
                cnt[2] = cnt[2] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[3] = cnt[3] + 1;
            }
            if (choices[i] === 6) {
                cnt[3] = cnt[3] + 2;
            }
            if (choices[i] === 7) {
                cnt[3] = cnt[3] + 3;
            }
        }
        if (survey[i] === 'FC') {
            if (choices[i] === 1) {
                cnt[3] = cnt[3] + 3;
            }
            if (choices[i] === 2) {
                cnt[3] = cnt[3] + 2;
            }
            if (choices[i] === 3) {
                cnt[3] = cnt[3] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[2] = cnt[2] + 1;
            }
            if (choices[i] === 6) {
                cnt[2] = cnt[2] + 2;
            }
            if (choices[i] === 7) {
                cnt[2] = cnt[2] + 3;
            }
        }
        if (survey[i] === 'JM') {
            if (choices[i] === 1) {
                cnt[4] = cnt[4] + 3;
            }
            if (choices[i] === 2) {
                cnt[4] = cnt[4] + 2;
            }
            if (choices[i] === 3) {
                cnt[4] = cnt[4] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[5] = cnt[5] + 1;
            }
            if (choices[i] === 6) {
                cnt[5] = cnt[5] + 2;
            }
            if (choices[i] === 7) {
                cnt[5] = cnt[5] + 3;
            }
        }
        if (survey[i] === 'MJ') {
            if (choices[i] === 1) {
                cnt[5] = cnt[5] + 3;
            }
            if (choices[i] === 2) {
                cnt[5] = cnt[5] + 2;
            }
            if (choices[i] === 3) {
                cnt[5] = cnt[5] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[4] = cnt[4] + 1;
            }
            if (choices[i] === 6) {
                cnt[4] = cnt[4] + 2;
            }
            if (choices[i] === 7) {
                cnt[4] = cnt[4] + 3;
            }
        }
        if (survey[i] === 'AN') {
            if (choices[i] === 1) {
                cnt[6] = cnt[6] + 3;
            }
            if (choices[i] === 2) {
                cnt[6] = cnt[6] + 2;
            }
            if (choices[i] === 3) {
                cnt[6] = cnt[6] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[7] = cnt[7] + 1;
            }
            if (choices[i] === 6) {
                cnt[7] = cnt[7] + 2;
            }
            if (choices[i] === 7) {
                cnt[7] = cnt[7] + 3;
            }
        }
        if (survey[i] === 'NA') {
            if (choices[i] === 1) {
                cnt[7] = cnt[7] + 3;
            }
            if (choices[i] === 2) {
                cnt[7] = cnt[7] + 2;
            }
            if (choices[i] === 3) {
                cnt[7] = cnt[7] + 1;
            }
            if (choices[i] === 4) {
                continue;
            }
            if (choices[i] === 5) {
                cnt[6] = cnt[6] + 1;
            }
            if (choices[i] === 6) {
                cnt[6] = cnt[6] + 2;
            }
            if (choices[i] === 7) {
                cnt[6] = cnt[6] + 3;
            }
        }
    }
  if (cnt[0] >= cnt[1]) {
        answer = answer + 'R';
    }
    if (cnt[0] < cnt[1]) {
        answer = answer + 'T';
    }
    if (cnt[2] >= cnt[3]) {
        answer = answer + 'C';
    }
    if (cnt[2] < cnt[3]) {
        answer = answer + 'F';
    }
    if (cnt[4] >= cnt[5]) {
        answer = answer + 'J';
    }
    if (cnt[4] < cnt[5]) {
        answer = answer + 'M';
    }
    if (cnt[6] >= cnt[7]) {
        answer = answer + 'A';
    }
    if (cnt[6] < cnt[7]) {
        answer = answer + 'N';
    }
    return answer;
}
  • 상당히 무식하게 풀었다
  • 모든 유형을 if문으로 분기하여 점수를 계산했다
  1. 레퍼런스
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("");
}
  • 다른 사람의 응답 중 가장 좋았다고 생각되는 답안을 가져왔다
  • 아직 이해를 다 못하였다, 풀이를 공부를 해봐야겠다
  • forEach, map을 활용한 풀이를 고민해야겠다, 대부분의 심플한 답안들은 앞의 2가지를 활용한 풀이를 작성하였음

0개의 댓글

관련 채용 정보