성격 유형 검사하기 _ Lv.1

2022. 9. 6. 23:292022/Programmers_Kakao 기출

흠....굉장히 풀면서도 풀이가 마음에 안드는 문제였다.

다시 최적화해서 풀어볼 예정!

# 매우동의 또는 매우비동의 = 3점
# 동의 또는 비동의 = 2점
# 약간 동의 또는 약간 비동의 = 1점
# 모르겠음 = 0점

# 성격 유형 점수가 같으면, 사전 순으로 빠른 성격 유형을 검사자의 유형이라 판단
def solution(survey, choices):
    grade = [0, 3, 2, 1, 0, 1, 2, 3]
    TFMNstr = "TFMN"; RCJAstr = "RCJA"; answer = ''
    RCJA = [0, 0, 0, 0] # RT , CF, JM, AN
    TFMN = [0, 0, 0, 0]
    for i in range(len(choices)):
        if choices[i] > 4:
            if survey[i] == "AN":
                TFMN[3]+=grade[choices[i]]
            elif survey[i] == "NA":
                RCJA[3] += grade[choices[i]]
            elif survey[i] == "RT":
                TFMN[0]+=grade[choices[i]]
            elif survey[i] == "TR":
                RCJA[0] += grade[choices[i]]
            elif survey[i] == "CF":
                TFMN[1]+=grade[choices[i]]
            elif survey[i] == "FC":
                RCJA[1] += grade[choices[i]]
            elif survey[i] == "JM":
                TFMN[2]+=grade[choices[i]]
            elif  survey[i] == "MJ":
                RCJA[2] += grade[choices[i]]

        elif choices[i] < 4 and choices[i] > 0:
            if survey[i] == "AN":
                RCJA[3] += grade[choices[i]]
            elif survey[i] == "NA":
                TFMN[3] += grade[choices[i]]
            elif survey[i] == "RT":
                RCJA[0] += grade[choices[i]]
            elif survey[i] == "TR":
                TFMN[0] += grade[choices[i]]
            elif survey[i] == "CF":
                RCJA[1] += grade[choices[i]]
            elif survey[i] == "FC":
                TFMN[1] += grade[choices[i]]
            elif survey[i] == "JM":
                RCJA[2] += grade[choices[i]]
            elif survey[i] == "MJ":
                TFMN[2] += grade[choices[i]]

    for i in range(4):
        if TFMN[i] > RCJA[i]:
            answer += TFMNstr[i]
        elif TFMN[i] < RCJA[i]:
            answer += RCJAstr[i]
        else:
            if TFMNstr[i] < RCJAstr[i]:
                answer+=TFMNstr[i]
            else:
                answer+=RCJAstr[i]
    return answer

아래는 나름 최적화한 코드!

def solution(survey, choices):
    grade = [0, 3, 2, 1, 0, 1, 2, 3]
    TFMNstr = "TFMN"; RCJAstr = "RCJA"; answer = ''
    RCJA = [0, 0, 0, 0]; RCJAList = ["R", "C", "J", "A"]
    TFMN = [0, 0, 0, 0]; TFMNList = ["T", "F", "M", "N"]
    for i in range(len(choices)):
        # 점수가 4보다 크면 1번째 인덱스의 성격에 + 점수, 1과 3 사이면 0번째 인덱스의 성격에 + 점수
        if choices[i] > 4:
            if survey[i][1] in RCJAList:
                loc = RCJAList.index(survey[i][1])
                RCJA[loc] += grade[choices[i]]
            else:
                loc = TFMNList.index(survey[i][1])
                TFMN[loc] += grade[choices[i]]

        elif choices[i] < 4 and choices[i] > 0:
            if survey[i][0] in RCJAList:
                loc = RCJAList.index(survey[i][0])
                RCJA[loc] += grade[choices[i]]
            else:
                loc = TFMNList.index(survey[i][0])
                TFMN[loc] += grade[choices[i]]

    for i in range(4):
        if TFMN[i] > RCJA[i]:
            answer += TFMNstr[i]
        elif TFMN[i] < RCJA[i]:
            answer += RCJAstr[i]
        else:
            if TFMNstr[i] < RCJAstr[i]:
                answer+=TFMNstr[i]
            else:
                answer+=RCJAstr[i]
    return answer

'2022 > Programmers_Kakao 기출' 카테고리의 다른 글

두 큐 합 같게 만들기 _ Lv.2*  (0) 2022.09.10
크레인 인형뽑기 게임 _ Lv.1  (0) 2022.09.09
키패드 누르기 _ Lv.1  (0) 2022.09.06
숫자 문자열과 영단어 _ Lv.1  (0) 2022.09.05
신규 아이디 추천 _ Lv.1  (0) 2022.09.04