-
118666. 성격 유형 검사하기(Python, Programmers Level 1)Programmers 2022. 9. 3. 23:43
설명
MBTI 성격유형검사와 매우 유사한 문제입니다.
입력에는 어떤 성격 유형의 지표가 사용되었는지와 점수가 쌍으로 입력되며,
성격 유형 검사는 다음과 같은 네 개의 지표로 성격을 구분합니다.
지표 번호 성격 유형 1번 지표 라이언형(R) 튜브형(T) 2번 지표 콘형(C) 프로도형(F) 3번 지표 제이지형(J) 무지형(M) 4번 지표 어피치형(A) 네오형(N) 부여되는 점수는 다음과 같습니다.
choice 먼저 등장한 알파벳 나중에 등장한 알파벳 1 3 0 2 2 0 3 1 0 4 0 0 5 0 1 6 0 2 7 0 3 4보다 낮은 숫자가 들어오면 입력받은 지표 중 앞의 문자에 점수를,
4보다 높은 숫자가 들어오면 입력받은 지표 중 뒤의 문자에 점수를 부여하게 되며,
부여되는 점수는 (4 - score)에 절댓값을 취한 것과 동일합니다.
위 계산을 마친 후,
R, T 중 점수가 높은 항목
C, F 중 점수가 높은 항목
J, M 중 점수가 높은 항목
A, N 중 점수가 높은 항목
을 출력합니다. (두 점수가 같다면 알파벳순으로 빠른 것을 출력합니다.)
코드
먼저 점수를 종합하기 위해 dict 자료형을 사용했습니다.
defaultdict를 사용하여 만약 들어있지 않은 값이라면 0을 반환하게 하였습니다.
scores = defaultdict(int)
survey와 choices를 동시에 순회하며,
choice가 4보다 작은 경우 앞의 항목에,
그렇지 않은 경우 뒤의 항목에 abs(4 - choices) 한 값을 더해줍니다.
for (first, second), choice in zip(survey, choices): survey_choice = first if choice < 4 else second scores[survey_choice] += abs(4 - choice)
결과를 종합하고 반환합니다.
각 유형에서 어느 한 쪽의 점수가 높다면 해당 유형의 결과는 점수가 높은 쪽의 알파벳 유형입니다.
그렇지 않다면, 사전순으로 먼저 오는 알파벳을 선택합니다.
answer = "" for first, second in ("RT", "CF", "JM", "AN"): answer += first if scores[second] < scores[first] \ else second if scores[first] < scores[second] \ else min(first, second)
더보기from collections import defaultdict def solution(survey, choices): scores = defaultdict(int) for (first, second), choice in zip(survey, choices): survey_choice = first if choice < 4 else second scores[survey_choice] += abs(4 - choice) answer = "" for first, second in ("RT", "CF", "JM", "AN"): answer += first if scores[second] < scores[first] \ else second if scores[first] < scores[second] \ else min(first, second) return answer if __name__ == '__main__': result = solution(["AN", "CF", "MJ", "RT", "NA"], [5, 3, 2, 7, 5]) print("TCMA" == result, result) result = solution(["TR", "RT", "TR"], [7, 1, 3]) print("RCJA" == result, result)
'Programmers' 카테고리의 다른 글
72410. 신규 아이디 추천(Python, Programmers Level 1) (0) 2022.09.04 77484. 로또의 최고 순위와 최저 순위(Python, Programmers Level 1) (0) 2022.09.04 86491. 최소직사각형(Python, Programmers Level 1) (0) 2022.09.04 12906. 같은 숫자는 싫어(Python, Programmers Level 1) (0) 2022.09.04 92334. 신고 결과 받기(Python, Programmers Level 1) (0) 2022.09.04