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

do yeon kim·2022년 8월 31일
0
회고

딕셔너리를 이용해서 해당 값들을 맵핑해서 가지고 오고, 그 값들을 비교하면서 해당 문제를 풀었다. 그러다 보니 너무 하드코딩을 했다. 그리고 가독성이 떨어진다. 나만 이해하는 코드가 된것이다.

다른 사람의 코드를 보면서 좀 더 리펙토리을 하든, 아니면 새롭게 코드를 짜든 내 코드를 좀더 보완해야 겠다.

Lv1 성격유형검사하기

문제
https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=python3


# a, b 요소 중 값이 더 큰 값을 리턴해주는 함수이다.
# 만약 값이 같다면 알파벳 순으로 더 빠른 요소를 리턴해준다.
# 값이 하나만 있다면 해당 값을 리턴해 준다.

def check_answer(a, b, result_list):
    if a in result_list.keys() and b in result_list.keys():
        
        # 두개의 요소 중 더 큰값을 리턴해준다.
        if result_list[a] >= result_list[b]:
            return a
        else:
            return b
    elif a in result_list.keys():
        return a
    
    elif b in result_list.keys():
        return b
    
    else:
        return a

def solution(survey, choices):
    
    choice_list ={
        1   :"매우비동의",
        2   :"비동의",
        3   :"약간 비동의",
        4   :"모르겠음",
        5   :"약간 동의",
        6   :"동의",
        7   :"완전동의"
    }

    score_choice_list = {
        "매우비동의"    : 3,
        "비동의"       : 2,
        "약간 비동의"   : 1,
        "모르겠음"     : 0,
        "약간 동의"     : 1,
        "동의"         : 2,
        "완전동의"      : 3 
    }

    result_list = {}
	
    # 반복문을 돌면서 해당 choices가 choice_list에 어디에 해당하는지 어느 대답유형에 확인 하는지 확인한다.
    for i in range(len(survey)):
        
        # if문을 이용해서 4보다 작은경우에 [매우비동의, 비동의, 약간 비동의] 에 해당한다.
        if choices[i] < 4:
            # 해당 데이터가 이미 존재한다면 해당데이터에 점수를 더해주는 코드이다.
            if survey[i][0] in result_list:    
                result_list[survey[i][0]] += score_choice_list[choice_list[choices[i]]]
            
            # 그렇지 않은 경우라면 새로운 요소에 점수를 맵핑해서 딕셔너리로 만드는 코드이다.
            else:
                result_list[survey[i][0]] = score_choice_list[choice_list[choices[i]]]
        
        
        # if문을 이용해서 4보다 큰경우에 [약간동의, 동의, 완전동의] 에 해당한다.
        elif 4 < choices[i]:
            if survey[i][1] in result_list:    
                result_list[survey[i][1]] += score_choice_list[choice_list[choices[i]]]
            else:
                result_list[survey[i][1]] = score_choice_list[choice_list[choices[i]]]
    
    answer = ""
    
    
    # result_list에는 "R"에 해당하는 값, "T"에 해당하는 값 식으로 들어온다.
    # result_list = {"R":3,"T":1,"C":2.......}
    # result_list에 결과로 들어온 요소들을 가지고서 해당 요소들 중 더 큰 값을 구하는 코드이다.
    
    answer += check_answer("R","T", result_list)
    answer += check_answer("C","F", result_list)
    answer += check_answer("J","M", result_list)
    answer += check_answer("A","N", result_list)

    return answer  

a = solution(survey,choice)
print(a)

0개의 댓글