나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 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점을 받게 됩니다.
위 예시처럼 네오형이 비동의, 어피치형이 동의인 경우만 주어지지 않고, 질문에 따라 네오형이 동의, 어피치형이 비동의인 경우도 주어질 수 있습니다.
하지만 각 선택지는 고정적인 크기의 점수를 가지고 있습니다.
검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.
질문마다 판단하는 지표를 담은 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 | 뜻 |
---|---|
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(''); // 배열을 문자열로 변환하기
}
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/
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/