2 분 소요

문제 링크

내 풀이

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값들만 불러오고 리스트로 바꾼 스킬

댓글남기기