[Programmers][Py] 성격 유형 검사하기

mj·2024년 7월 17일
0

코딩테스트문제

목록 보기
38/50

✅ 문제


문제 바로가기

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

choices
1매우 비동의 (3점)
2비동의 (2점)
3약간 비동의 (1점)
4모르겠음 (0점)
5약간 동의 (1점)
6동의 (2점)
7매우 동의 (3점)

입출력 예시

surveychoicesresult
["AN", "CF", "MJ", "RT", "NA"][5, 3, 2, 7, 5]"TCMA"
["TR", "RT", "TR"][7, 1, 3]"RCJA"



✅ 나의 구현과정


1. 변수 설정

유형별 점수

딕셔너리로 표현, 0으로 초기화해두기

scoreDic = {"R":0, "T":0, "C":0, "F":0, "J":0, "M":0, "A":0, "N":0}

선택지에 따른 점수 / 처리방식

  • 딕셔너리로 표현
  • 형식 : 선택지번호 : [동의여부, 점수]
    동의 여부는 0 또는 1로 나타낸다. (0은 비동의, 1은 동의)
choiceDic = {1:[0,3], 2:[0,2], 3:[0,1], 4:[0,0], 5:[1,1], 6:[1,2], 7:[1,3]}

예를들어,
1번 선택지의 경우 '매우 비동의'로 점수는 3점이며 비동의를 나타내므로 [0, 3]
4번 선택지의 경우 '모르겠음'으로 아무도 점수를 얻지않는다. 어차피 0점이 더해지므로 동의여부는 0이든 1이든 상관없다.

지표 담는 방식

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

1번 지표부터 차례대로 나타낼수 있는 성격유형을 담았다.


2. 유형별 점수 계산

# 유형별 점수 계산
for i in range(len(survey)):
		# 선택지 번호를 저장 (ex. choice = 5)
        choice = choices[i] 
        
        # 해당 선택지에 대한 점수 가져옴(ex. type = 1(동의), score = 1점)
        type, score = choiceDic[choice] 
        
        # 해당 선택지에 대한 유형을 가져옴 (ex. type = "N")
        type = survey[i][type] 
        
        # 점수 반영
        scoreDic[type] += score # 해당 유형에 대한 점수를 반영 (ex. scoreDic {"N": 1})

3. 유형 결정

 # 유형 결정
    for t in types: # 차례대로 4개의 유형을 결정
        a = t[0]
        b = t[1]
        scoreA = scoreDic[a]
        scoreB = scoreDic[b]
            
        if scoreA < scoreB: result += b
        else: result += a

문제조건) 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단한다.

types에 지표를 담을때부터 사전순으로 담아두었다.("NA"가 아닌"AN"로 표현)
따라서 성격유형점수가 같으면 첫번째 문자로 성격유형을 판단한다. ("NA"이면 "N"으로 판단)



✅ 전체 코드


def solution(survey, choices):
    
    scoreDic = {"R":0, "T":0, "C":0, "F":0, "J":0, "M":0, "A":0, "N":0}
    choiceDic = {1:[0,3], 2:[0,2], 3:[0,1], 4:[0,0], 5:[1,1], 6:[1,2], 7:[1,3]}
    types = ["RT", "CF", "JM", "AN"]
    result = ''
    
    # 유형별 점수 계산
    for i in range(len(survey)):
        choice = choices[i]
        type, score = choiceDic[choice]
        type = survey[i][type]
        
        # 점수 반영
        scoreDic[type] += score
        
    # 유형 결정
    for t in types:
        a = t[0]
        b = t[1]
        scoreA = scoreDic[a]
        scoreB = scoreDic[b]
            
        if scoreA < scoreB: result += b
        else: result += a
            
            
    return result
profile
일단 할 수 있는걸 하자.

0개의 댓글