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를 가져와야 하므로) 각각 알파벳에 맞게 딕셔너리를 연결해준다.
점수를 돌면서 각각 점수를 더한다.