CodingTest/Programmers
[ 프로그래머스 ] 성격 유형 검사하기
EEOOOO
2022. 11. 2. 12:16
풀이 소요 시간 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])