[KAKAO Tech Internship] 성격 유형 검사하기

재오·2023년 6월 23일
5

코딩테스트

목록 보기
46/46
post-thumbnail

🗒️ 문제

나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.

지표 번호성격 유형
1번 지표라이언형(R), 튜브형(T)
2번 지표콘형(C), 프로도형(F)
3번 지표제이지형(J), 무지형(M)
4번 지표어피치형(A), 네오형(N)

4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.

검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.

  • 매우 비동의
  • 비동의
  • 약간 비동의
  • 모르겠음
  • 약간 동의
  • 동의
  • 매우 동의

각 질문은 1가지 지표로 성격 유형 점수를 판단합니다.

예를 들어, 어떤 한 질문에서 4번 지표로 아래 표처럼 점수를 매길 수 있습니다.

선택지성격 유형 점수
매우 비동의네오형 3점
비동의네오형 2점
약간 비동의네오형 1점
모르겠음어떤 성격 유형도 점수를 얻지 않습니다
약간 동의어피치형 1점
동의어피치형 2점
매우 동의어피치형 3점

이때 검사자가 질문에서 약간 동의 선택지를 선택할 경우 어피치형(A) 성격 유형 1점을 받게 됩니다. 만약 검사자가 매우 비동의 선택지를 선택할 경우 네오형(N) 성격 유형 3점을 받게 됩니다.

위 예시처럼 네오형이 비동의, 어피치형이 동의인 경우만 주어지지 않고, 질문에 따라 네오형이 동의, 어피치형이 비동의인 경우도 주어질 수 있습니다.
하지만 각 선택지는 고정적인 크기의 점수를 가지고 있습니다.

  • 매우 동의나 매우 비동의 선택지를 선택하면 3점을 얻습니다.
  • 동의나 비동의 선택지를 선택하면 2점을 얻습니다.
  • 약간 동의나 약간 비동의 선택지를 선택하면 1점을 얻습니다.
  • 모르겠음 선택지를 선택하면 점수를 얻지 않습니다.

검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.

질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다. 이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.

⚠ 제한사항

  • 1 ≤ survey의 길이 ( = n) ≤ 1,000

    • survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나입니다.

    • survey[i]의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.

    • survey[i]의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.

  • choices의 길이 = survey의 길이

    • choices[i]는 검사자가 선택한 i+1번째 질문의 선택지를 의미합니다.
    • 1 ≤ choices의 원소 ≤ 7
choices
1매우 비동의
2비동의
3약간 비동의
4모르겠음
5약간 동의
6동의
7매우 동의

📝 문제 해설

문제를 이해하는 것에 다소 많은 시간이 걸린다. 하지만 그렇게 어려운 문제도 아니고 코드 길이도 상당히 짧게 나온다. 우선 성격 유형이 담긴 문자를 배열에 순서대로 넣어둔다. 뒤에 조건을 보면 계산 값이 같을 경우에는 알파벳 순서대로 작은 값을 반환하는데 그걸 고려하여 애초에 배열에 짝궁끼리 알파벳 순서대로 정렬해둔다.

그리고 후에 해당 성격 유형에 해당되는 값을 계산하기 위해 배열을 하나 더 생성하는데 이곳에는 모두 0으로 초기화를 해둔다. 그리고 이 값들을 비교해서 최종 배열에 두개 중 하나를 넣고 이 4개의 값들을 문자열로 변환해주면 끝난다.

이제 구현 과정에서 만약 choice에 있는 원소값이 4보다 크다면 동의하는 점수이다. 동의는 두개의 문자 중에서 뒤쪽에 배치되어있는 문자이기 때문에 arr배열에서 뒤쪽 문자에 해당되는 인덱스 값을 choice에 있는 원소값-4 만큼 더해준다. 반대에 경우에도 마찬가지이다. choice의 원소값이 4라면 어짜피 계산되는 값이 0이기 때문에 무시하고 예외처리는 따로 하지 않는다.

그리고 0번째, 2번째, 4번째 인덱스에서만 뒤에 값과 비교하여 큰 값 혹은 같은 값이라면 앞쪽에 위치한 값을 최종 result배열에 넣어주면 해결되는 문제이다.

💻 코드

function solution(survey, choices) {
    let arr = ["R", "T", "C", "F", "J", "M", "A", "N"]; // 모든 유형을 배열에 정렬해둔다 (알파벳 순서)
    let score = [0, 0, 0, 0, 0, 0, 0, 0]; // 계산 결과를 반영하기 위한 배열 설정
    let result = []; // 최종 성격유형 검사가 담길 배열 생성
    
  	// choices의 원소를 하나씩 비교해가기
    for(let i=0; i<choices.length; i++){
      	// 원소값이 4보다 크다면 뒤에 있는 문자가 해당되는 곳에 값 넣기
        if(choices[i] > 4){
            score[arr.indexOf(survey[i][1])] += choices[i] - 4;
        }
      	// 원소값이 4보다 작다면 앞에 있는 문자가 해당되는 곳에 값 넣기
        else if(choices[i] < 4){
            score[arr.indexOf(survey[i][0])] += 4 - choices[i];
         // 원소값이 4라면 0이기 때문에 무시하고 예외처리 하지 않는다
        }
    }
    
  	// 두개씩 점수를 비교해가며 크거나 같으면 첫번째 원소 푸쉬
    for(let i=0; i<score.length; i+=2){
        if(score[i] >= score[i+1]) result.push(arr[i]);
        else result.push(arr[i+1]);
    }
    
    return result.join(''); // 배열을 문자열로 변환하기
}
profile
블로그 이전했습니다

2개의 댓글

comment-user-thumbnail
2023년 7월 2일

https://melonplaymods.com/2023/06/10/buff-saitama-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/iphone-7s-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/balls-mod-for-melon-playground-2/
https://melonplaymods.com/2023/06/11/one-punch-mannpc-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/alphabet-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/robo-pack-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/spyglass-from-minecraft-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/chainsaw-devil-chainsaw-man-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/military-backgrounds-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/t-35-tank-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/spider-man-and-venom-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/chicken-gun-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/5-cans-of-soda-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/evil-wubbox-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/underwater-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/train-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/david-beaver-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/mazda-cx-5-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/green-saitama-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/doors-mod-for-melon-playground/

답글 달기
comment-user-thumbnail
2023년 7월 2일

https://melonplaymods.com/2023/06/11/rocket-for-melon-playground-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/the-man-from-the-windowrostishca-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/classic-house-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/artifacts-and-detectors-from-stalker-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/prehistoric-nature-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/detailed-akainu-magu-skill-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/t-64-bm-soviet-tank-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/armored-car-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/antiaircraft-gun-mod-for-melon-playground-2/
https://melonplaymods.com/2023/06/11/aks-74-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/gang-bucciarati-from-anime-jojo-season-5-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/5-cans-of-soda-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/jiren-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/rocket-fox-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/the-dollnpc-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/undertale-characters-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/turret-from-portal-2-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/giant-cameraman-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/forklift-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/bone-monster-mod-for-melon-playground-2/

답글 달기