본문 바로가기

CodingTest/Programmers

[ 프로그래머스 ] 성격 유형 검사하기

풀이 소요 시간 18분

 

생각보다 깔끔하게 풀렸다. 

 

def solution(survey, choices):
    answer = ''
    dict = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
    
    for char, choi in zip(survey, choices):
        a, b = char[0], char[1]
        if choi < 4:
            dict[a] += (4 - choi)
        elif choi > 4:
            dict[b] += (choi - 4)
            
    for i in range(4):
        a = list(dict.items())[2*i]
        b = list(dict.items())[2*i+1]
        
        if a[1] < b[1]:
            answer += b[0]
        elif a[1] > b[1]:
            answer += a[0]
        else:
            answer += min(a[0], b[0])
            
    return answer

 

 


 

survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나입니다.

이 문구를 어떻게 처리할까를 조금 고민했는데, 그냥 딕셔너리로 처리하고,

문자열 앞 글자/뒷 글자로 뽀개버려서 비교해 딕셔너리의 본인 값에 +점수 해주는 방식으로 처리했다.

 

    answer = ''
    dict = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
    
    for char, choi in zip(survey, choices):
        a, b = char[0], char[1]
        if choi < 4:
            dict[a] += (4 - choi)
        elif choi > 4:
            dict[b] += (choi - 4)

 


 

각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다.
단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.

 

딕셔너리 설정 시 2개씩 차례대로 설정하게 했기 때문에 8개의 옵션을 2개씩 끊어가며 서로를 비교했다. 

단순하게 크기 비교해서 조건에 맞게 정답문자열에 더해지게 설정했다. 

 

    for i in range(4):
            a = list(dict.items())[2*i]
            b = list(dict.items())[2*i+1]

            if a[1] < b[1]:
                answer += b[0]
            elif a[1] > b[1]:
                answer += a[0]
            else:
                answer += min(a[0], b[0])