[Python_ 성격 유형 검사하기]
<STUDY>
📢 문제 📢
성격 유형 검사는 다음과 같은 4개의 지표로 구분한다.
지표 번호 | 성격 유형 |
1번 지표 | 라이언형(R), 튜브형(T) |
2번 지표 | 콘형(C), 프로도형(F) |
3번 지표 | 제이지형(J), 무지형(M) |
4번 지표 | 어피치형(A), 네오형(N) |
검사진에는 총 n개의 질문이 있고, 각 질문에는 7개의 선택지가 있다.
선택지 | 성격 유형 검사 |
매우 비동의 | 3점 |
비동의 | 2점 |
약간 비동의 | 1점 |
모르겠음 | 0점 |
약간 동의 | 1점 |
동의 | 2점 |
매우 동의 | 3점 |
검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단한다.
단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다. ex) A, N의 점수가 같은 경우 A로 판단
질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다.
이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.
** 제한 사항
1 <= survey의 길이 (n) <= 1000
- survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나
- survey[i]의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
- survey[i]의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
choices의 길이 = survey의 길이 (n)
- choices[i] 는 검사자가 선택한 i+1번째 질문지의 선택지
- 1 <= choices의 원소 <= 7
choices | 뜻 |
1 | 매우 비동의 |
2 | 비동의 |
3 | 약간 비동의 |
4 | 모르겠음 |
5 | 약간 동의 |
6 | 동의 |
7 | 매우 동의 |
❗아이디어
- 성격 유형을 딕셔너리 "key": value 형태로 만들어 점수를 계산한다.
<전체 코드>
def solution(survey, choices):
answer = ''
result = {"R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0}
for category, score in zip(survey,choices):
if score < 4: result[category[0]] += 4-score
elif score > 4: result[category[1]] += score-4
list = list(result.items())
for i in range(0,8,2):
if list[i][1] < list[i+1][1]:
answer += list[i+1][0]
else:
answer += list[i][0]
return answer
<코드 설명>
☝ 성격유형 딕셔너리로 만들기
result = {"R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0}
- 각 유형 별로 value를 0으로 설정하여 초기 점수를 만든다.
✌ 점수 계산하기
for category, score in zip(survey,choices):
if score < 4: result[category[0]] += 4-score
elif score > 4: result[category[1]] += score-4
- survey와 choices 배열을 zip() 함수를 통해 묶어준다.
- 4보다 작은 경우 앞 유형에 점수를 주고 4보다 큰 경우 뒤 유형에 점수를 준다.
- 부여되는 점수가 4를 기준으로 앞, 뒤가 다르기 때문에 앞은 4-점수, 뒤는 점수-4로 계산한다.
🤟 유형 결정하기
list = list(result.items())
for i in range(0,8,2):
if list[i][1] < list[i+1][1]:
answer += list[i+1][0]
else:
answer += list[i][0]
- 점수가 큰 유형을 선택하되, 같은 경우에는 사전 빠른 유형을 선택하기 때문에 뒤가 큰 경우와 그렇지 않은 경우로 나누어 결정한다.
🔆프로그래머스 Lv1. 성격 유형 검사하기🔆
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스_자바스크립트] Lv.2 튜플 / 문자열, Set 사용하기 (0) | 2022.12.18 |
---|---|
[프로그래머스_자바스크립트] Lv2. 타겟 넘버 / DFS, 깊이 우선 탐색 (0) | 2022.12.17 |
[프로그래머스_자바스크립트] Lv2. 최댓값과 최솟값 (0) | 2022.12.14 |
[백준코딩_파이썬] 10250번_ACM 호텔 (0) | 2022.09.28 |
[백준코딩_파이썬] 2869번_달팽이는 올라가고싶다 (2) | 2022.09.26 |