문제
문제설명
지표 번호 | 성격 유형 |
1번 지표 | 라이언형(R), 튜브형(T) |
2번 지표 | 콘형(C), 프로도형(F) |
3번 지표 | 제이지형(J), 무지형(M) |
4번 지표 | 어피치형(A), 네오형(N) |
다음과 같은 지표를 따르는 성격 유형 검사지를 만들고자 한다고 한다. 성격은 각 지표에서 두 유형 중 하나로 결정된다.
4개의 지표가 있으므로 총 16가지가 나올 수 있으며, 나오는 성격 유형의 예시로는 "RFMN"이나 "TCMA"와 같은 형태로 결정된다. 검사지에는 총 n개의 질문이 있고, 1번부터 차례대로 "매우 비동의", "비동의", "약간 비동의", "모르겠음", "약간동의", "동의", "매우 동의"로 이루어져 있다. 그리고 선택지 별로 아래 표와 같이 점수가 부여된다.
선택지 | 성격 유형 점수 |
매우 비동의 | 네오형 3점 |
비동의 | 네오형 2점 |
약간 비동의 | 네오형 1점 |
모르겠음 | 어떤 성격 유형도 점수를 얻지 않는다 |
약간 동의 | 어피치형 1점 |
동의 | 어피치형 2점 |
매우 동의 | 어피치형 3점 |
이렇게 점수를 매겨 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단한다. 만약 하나의 지표에서 각 성격 유형의 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단한다.
질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어질 때 검사자의 성격 유형 검사 결과를 반환하면 되는 문제이다.
※제한사항
- 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
풀이
문제 설명에 따르면 성격 유형 별로 점수를 매겨 그에 따른 성격 유형을 반환하면 된다고 나와 있다. 나는 이 문제를 단순하게 접근해서 풀었다. 먼저 선택지 별 점수에 대한 변수 score과 선택한 선택지에 대해 점수를 매겨 저장하는 변수 result를 만들고 주어진 변수 choices의 데이터를 조회해 그에 따른 선택지 별 점수를 매겨 주고 높은 점수를 가진 성격 유형을 반환해주는 식으로 작성했다.
아래는 풀이에 사용한 코드이다.
function solution(survey, choices) {
var answer = '';
// 선택지 별 점수를 담는 변수
let score = {"1" : 3, "2" : 2, "3" : 1 , "4" : 0 ,"5" : 1, "6" : 2, "7" : 3}
// 선택된 점수를 저장하는 변수
let result = {"R" : 0, "T" : 0, "C" : 0, "F" : 0, "J" : 0, "M" : 0, "A" : 0, "N" : 0}
// 성격 유형 별로 구분하기 위해 알파벳 별로 나눠준다
survey = survey.map((data) => data.split(""))
// choices에 있는 점수 별로 성격 유형 점수를 매겨 준다
choices.map((choice,index) => {
choice < 4 ? result[survey[index][0]] += score[choice]
: result[survey[index][1]] += score[choice]
})
// 점수가 높거나 더 앞에 있는 알파벳일 경우 answer에 추가해준다
result["R"] >= result["T"] ? answer="R" : answer="T"
result["C"] >= result["F"] ? answer+="C" : answer+="F"
result["J"] >= result["M"] ? answer+="J" : answer+="M"
result["A"] >= result["N"] ? answer+="A" : answer+="N"
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.01 연습문제 명예의 전당(1) (JavaScript) (0) | 2024.05.10 |
---|---|
[프로그래머스] Lv.01 연습문제 개인정보 수집 유효기간 (JavaScript) (0) | 2024.05.05 |
[프로그래머스] Lv.01 연습문제 덧칠하기 (JavaScript) (0) | 2024.05.02 |
[프로그래머스] Lv.01 연습문제 추억 점수 (JavaScript) (0) | 2024.04.26 |
[프로그래머스] Lv.02 연습문제 예상 대진표 (JavaScript) (0) | 2024.04.23 |