[프로그래머스] LV 1 - 성격 유형 검사하기

Birdie·2023년 4월 2일

https://school.programmers.co.kr/learn/courses/30/lessons/118666

프로그래머스 Lv1

문제 제목 : 성격 유형 검사하기

풀이

from collections import defaultdict

def solution(survey, choices):
    # 미리 값을 0으로 설정 
    score_dic = defaultdict(int)

    # survey 조회하며 점수 더하기 
    for i in range(len(survey)):
        one_survey = list(survey[i])
        user_choice = choices[i]

        # 0점일 경우 무시하기 
        if user_choice == 4:
            continue

        # 불만족 점수 더하기
        elif user_choice > 0 and user_choice < 4:
            tmp = one_survey[0]
            score_dic[tmp] += getScore(user_choice)

        # 만족 점수 더하기 
        elif user_choice > 4 and user_choice < 8:
            tmp = one_survey[1]
            score_dic[tmp] += getScore(user_choice)

    first = find_one_mbti('R', 'T', score_dic)
    second = find_one_mbti('C', 'F', score_dic)
    third = find_one_mbti('J', 'M', score_dic)
    fourth = find_one_mbti('A', 'N', score_dic)

    return first + second + third + fourth

# 만족 불만족에 따른 점수 부여 
def getScore(number):
    if number == 1:
        return 3
    elif number == 2:
        return 2
    elif number == 3:
        return 1
    elif number == 4:
        return 0
    elif number == 5:
        return 1
    elif number == 6:
        return 2
    elif number == 7:
        return 3

# mbti 하나 결정하기, 점수가 같으면 앞선 mbti 부여
def find_one_mbti(a, b, score_dict):
    if score_dict[a] > score_dict[b]:
        return a
    elif score_dict[a] < score_dict[b]:
        return b
    else:
        return a

의식의 흐름대로 생각한 것을 구현했더니 if-else를 남발하고, 하드코딩된 느낌이 강하다. mbti가 만약 4자리가 아닌 가변적이었다면 문제해결이 안됐을 것이다.

이번 문제를 풀면서 파이썬 문법때문에 고생했다.
AN 으로 들어올 경우 ['A', 'N'] list 를 만들고 싶어서 split() 을 사용해했는데, 안돼서 찾아보니 list('AN') 이라는 편리한 기능을 발견했다.
또한 defaultdict 의 편리한 기능 덕분에 미리 dict 에 0인 값들을 지정해서 활용할 수 있었다.

0개의 댓글