프로그래머스 LV1 - 성격 유형 검사하기
내 풀이
def solution(survey, choices):
result = ''
select_dict = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
choice_dict = {1: 3, 2: 2, 3: 1, 4: 0, 5: 1, 6: 2, 7: 3}
for i, choice in enumerate(choices):
if choice > 4:
select_dict[survey[i][1]] += choice_dict[choice]
elif choice < 4:
select_dict[survey[i][0]] += choice_dict[choice]
# 1지표
if select_dict['R'] > select_dict['T']:
result += 'R'
elif select_dict['R'] < select_dict['T']:
result += 'T'
else:
result += 'R'
# 2지표
if select_dict['C'] > select_dict['F']:
result += 'C'
elif select_dict['C'] < select_dict['F']:
result += 'F'
else:
result += 'C'
# 3지표
if select_dict['J'] > select_dict['M']:
result += 'J'
elif select_dict['J'] < select_dict['M']:
result += 'M'
else:
result += 'J'
# 4지표
if select_dict['A'] > select_dict['N']:
result += 'A'
elif select_dict['A'] < select_dict['N']:
result += 'N'
else:
result += 'A'
return result
다른 풀이
def solution(survey, choices):
mbti_score = {
"R" : 0, # 1번 지표, 라이언형
"T" : 0, # 1번 지표, 튜브형
"C" : 0, # 2번 지표, 콘형
"F" : 0, # 2번 지표, 프로도형
"J" : 0, # 3번 지표, 제이지형
"M" : 0, # 3번 지표, 무지형
"A" : 0, # 4번 지표, 어피치형
"N" : 0 # 4번 지표, 네오형
}
choice_score = {
1 : 3, # 매우 비동의
2 : 2, # 동의
3 : 1, # 약간 동의
4 : 0, # 모르겠음
5 : 1, # 약간 동의
6 : 2, # 동의
7 : 3 # 매우 동의
}
result = ''
#["FC"]을 예로 들겠습니다.
#성격유형점수 부여시 숫자가 4보다 작으면 왼쪽 type("F")에 점수부여
#성격유형점수 부여시 숫자가 5보다 크거나 같으면 오른쪽 type("C")에 점수부여
for type_, choice in zip(survey, choices):
if choice < 4:
mbti_score[type_[0]] += choice_score[choice]
elif choice >= 5:
mbti_score[type_[1]] += choice_score[choice]
#mbti_score의 key들을 뽑아 ["R","T","C","F","J","M","A","N"] 만들기
mbti_keys = list(mbti_score.keys())
#예) {'R': 6, 'T': 1, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
#만든 list(mbti_keys())로 0~1 / 2~3 / 4~5 / 6~7 2개씩 끊어서 비교하기
for left, right in zip(mbti_keys[::2], mbti_keys[1::2]):
# R와 T / C와 F / J와 M / A와 M을 점수비교하여 더 큰 것을 result 추가
# 점수동일시 왼쪽에 있는 alp을 추가
if mbti_score[left] >= mbti_score[right]:
result += left
else:
result += right
return result
출처: https://1ets-just-do-it.tistory.com/51 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
- result에 글자를 더하는 과정에서 zip을 사용하여 코드를 간략화하였다
- dict의 key값들만 뽑아 리스트로 만들어 사용함
배울 점
- zip의 자유로운 사용
- list 슬라이싱을 통해 끊어서 비교하는 스킬
- dict에서 dict.keys()함수를 통해 key값들만 불러오고 리스트로 바꾼 스킬
댓글남기기