[프로그래머스] Lv.1 성격 유형 검사하기 (Python)
def solution(survey, choices):
answer = ''
personality = {
'R' : 0,
'T' : 0,
'C' : 0,
'F' : 0,
'J' : 0,
'M' : 0,
'A' : 0,
'N' : 0
}
for sur, choice in zip(survey, choices):
if choice - 4 > 0:
# 오른쪽 부분 알파벳
# personality[sur[1]] = personality[sur[1]] + choice-4
personality[sur[1]] += (choice - 4)
elif choice - 4 < 0:
# 왼족 부분 알파벳
personality[sur[0]] += (4 - choice)
new_personal = list(personality.items())
# 점수가 저장된 리스트를 순회하면서 점수가 높은 알파벳을 출력하면 됨
# RT/CF/JM/AN 이렇게 두쌍씩 봐야하니까 2씩 증가하면서 for문
# 앞에가 알파벳(0번째 인덱스), 1번째 인덱스가 점수임
# new_personal의 길이만큼 2씩 증가하면서 for문
for i in range(0, len(new_personal), 2):
# 점수가 높은 쪽 알파벳을 answer에 더해준다
if new_personal[i+1][1] > new_personal[i][1]:
answer += new_personal[i+1][0]
else: # 앞의 알파벳의 점수가 더 높거나 둘의 점수가 같다면
answer += new_personal[i][0] # 앞의 알파벳 출력, 사전순으로 빠른거
return answer
사실 이 전에 좀 시행착오가 많았는데 따로 기록을 안해두고 프로그래머스 자체에서 바로 수정 때려서 제출해버려서.. 기억이 잘 안남..😂
코드에 대한 자세한 설명은 주석에 적혀있으니 생략.
def solution(설문_조사_배열, 선택지_배열):
지표 = {}
지표['RT'] = 지표['TR'] = {'R': 0, 'T': 0,}
지표['FC'] = 지표['CF'] = {'C': 0, 'F': 0,}
지표['MJ'] = 지표['JM'] = {'J': 0, 'M': 0,}
지표['AN'] = 지표['NA'] = {'A': 0, 'N': 0,}
점수 = {
'매우 비동의': 3,
'비동의': 2,
'약간 비동의': 1,
'모르겠음': 0,
'약간 동의': 1,
'동의': 2,
'매우 동의': 3,
}
비동의 = [1, 2, 3]
동의 = [5, 6, 7]
선택지 = {
1: '매우 비동의',
2: '비동의',
3: '약간 비동의',
4: '모르겠음',
5: '약간 동의',
6: '동의',
7: '매우 동의',
}
answer = ''
for 인덱스 in range(len(설문_조사_배열)):
비동의_캐릭터, 동의_캐릭터 = 설문_조사_배열[인덱스]
if 선택지_배열[인덱스] in 비동의:
지표[설문_조사_배열[인덱스]][비동의_캐릭터] += 점수[선택지[선택지_배열[인덱스]]]
continue
if 선택지_배열[인덱스] in 동의:
지표[설문_조사_배열[인덱스]][동의_캐릭터] += 점수[선택지[선택지_배열[인덱스]]]
결과_배열 = [지표['RT'].items(), 지표['FC'].items(), 지표['MJ'].items(), 지표['AN'].items()]
정렬된_배열 = []
for 결과 in 결과_배열:
정렬된_배열.append(sorted(결과, key=lambda x: -x[1]))
return ''.join([캐릭터_점수_튜플[0] for [캐릭터_점수_튜플, _] in 정렬된_배열])
매우 신선한 접근.. 한글로 돼있어서 더 직관적임
def solution(survey, choices):
answer = ''
'RT'
'CF'
'JM'
'AN'
MBTI_dict = {
'RT': 0,
'CF': 0,
'JM': 0,
'AN': 0
}
# 반복문
for i in range(len(survey)):
mbti = survey[i]
if mbti in MBTI_dict:
# 양수일 경우, 앞에 나오는 유형이 +
# 음수일 경우, 뒤에 나오는 유형이 +
score = 4 - choices[i]
# 계산된 점수를 데이터에 최신화
MBTI_dict[mbti] += score
# 반대의 경우,
elif mbti[::-1] in MBTI_dict:
score = choices[i] - 4
MBTI_dict[mbti[::-1]] += score
# 계산된 결과를 가지고,
for key in MBTI_dict:
# 0보다 크거나 같으면, 앞을 선택
if MBTI_dict[key] >= 0:
answer+=key[0]
# 아닐 경우, 뒤를 선택
else:
answer+=key[1]
return answer
이거는 수업시간에 강사님이 풀어주신 방법
나처럼 모든 알파벳에 점수를 저장한 것이 아니라 입력되는 값 두쌍을 가지고 dictionary에 저장해서 풀이 한 방법