[프로그래머스(Lv 1)/파이썬] 성격유형 검사하기

jwKim·2023년 10월 31일
0

💻코테코테

목록 보기
37/42

📌 문제

https://school.programmers.co.kr/learn/courses/30/lessons/118666

📌 풀이

코드

def solution(survey, choices):

    dict_l = { 1 : 3, 2 : 2, 3 : 1} # 왼쪽에 더할 점수 환산
    dict_r = { 5 : 1, 6 : 2, 7 : 3} # 오른쪽에 더할 점수 환산

    # 각 검사별 점수
    RT = {'R' : 0, 'T' : 0}
    CF = {'C' : 0, 'F' : 0}
    JM = {'J' : 0, 'M' : 0}
    AN = {'A' : 0, 'N' : 0}

    # 검사들을 담아놓은 딕셔너리
    d = {'R' : RT, 'T' : RT, 'C' : CF, 'F' : CF, 'J' : JM, 'M' : JM, 'A' : AN, 'N' : AN}

    # 점수 계산
    for i in range(len(choices)) : 
        s = survey[i] 
        if choices[i] < 4 : # 앞 글자에 점수 더하기
            d[s[0]][s[0]] = d[s[0]][s[0]] + dict_l[choices[i]]
        elif choices[i] > 4 : # 뒷 글자에 점수 더하기
            d[s[1]][s[1]] = d[s[1]][s[1]] + dict_r[choices[i]]

    # 결과 반환
    rt = sorted(RT.items(), key=lambda x : x[1], reverse=True)[0][0]
    cf = sorted(CF.items(), key=lambda x : x[1], reverse=True)[0][0]
    jm = sorted(JM.items(), key=lambda x : x[1], reverse=True)[0][0]
    an = sorted(AN.items(), key=lambda x : x[1], reverse=True)[0][0]

    answer = rt + cf + jm + an    
    
    return answer

설명

이번 문제는 딕셔너리를 활용해 풀어보았다.

점수별로 왼쪽에 점수가 들어가야하는지, 오른쪽에 들어가야 하는지 다르다. 그래서 그 더해야 하는 점수를 환산하기 위해 dict_l과 dict_r을 각각 만든다.

그리고 각 성격 유형별로 점수를 계산하기 위해 4 개의 성격 유형별로 각각 딕셔너리를 따로 만든다.(RT, CF, JM, AN) 또한 각 문자열마다 점수를 계산하는 딕셔너리를 가져와야하므로(예를 들어 'R'이 나오면 RT를, 'F'가 나오면 CF를 가져와야 하므로) 각각 알파벳에 맞게 딕셔너리를 연결해준다.

점수를 돌면서 각각 점수를 더한다.

0개의 댓글