PS/프로그래머스

[Python] 성격 유형 검사하기

s_omi 2024. 11. 3. 09:01

✏️ 문제

 

문제 파악

R과 T, C와 F 는 세트(?)이기 때문에 이 세트를 살리기 위해 딕셔너리를 각각 나눠주면서 튜플을 사용했다.

그리고 유형이 반대로 들어올 수도 있기 때문에 반대에 해당하는 유형도 배열에 넣어줘서 딕셔너리의 값을 더할 때 

인덱스 [0]과 인덱스 [1]로 구분해서 더해주었다.

 

 

코드

def solution(survey, choices):
    answer = ''
    ary = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N']
    aryC = ['RT', 'TR', 'CF', 'FC', 'JM', 'MJ', 'AN', 'NA']
    category = {'R' : 0, 'T' : 0}, {'C' : 0, 'F' : 0}, {'J' : 0, 'M' : 0}, {'A' : 0, 'N' : 0}
    
    for i in range(len(survey)):
        s = survey[i]
        c = choices[i]
        
        if 0 < c < 4:
            category[int(aryC.index(s) // 2)][s[0]] += (4-c)
        else: 
            category[int(aryC.index(s) // 2)][s[1]] += (c-4)
    
    jump = 0
    for i, c in enumerate(category):
        jump += (i * 2)
        if category[i][ary[0+jump]] < category[i][ary[1+jump]]:
            answer += ary[1+jump]
        elif category[i][ary[0+jump]] > category[i][ary[1+jump]]:
            answer += ary[0+jump]
        else:
            answer += min(category[i])
        jump = 0
                
    return answer
  • 다른 사람의 풀이
def solution(survey, choices):
    my_dict = {"RT" : 0, "CF" : 0, "JM" : 0, "AN" : 0}
    
    for A,B in zip(survey,choices):
        if A not in my_dict.keys():
            A = A[::-1]
            my_dict[A] -= B-4
        else:
            my_dict[A] += B-4

    result = ""
    for name in my_dict.keys():
        if my_dict[name] > 0:
            result += name[1]
        elif my_dict[name] < 0:
            result += name[0]
        else:
            result += sorted(name)[0]

    return result

 

역순이 들어오면 바로 뒤집어서 풀으셨다. 바로 뒤집으면 더 쉽게 풀 수 있는데 생각을 못했네 ㅠ

  • 다른 사람의 풀이
def solution(survey, choices):
    scores = {"A":0, "N":0, "C":0, "F":0, "M":0, "J":0, "R":0, "T":0}
    
    for idx, choice in enumerate(choices):
        if choice - 4 > 0:
            scores[survey[idx][1]] += choice - 4
        elif choice - 4 < 0:
            scores[survey[idx][0]] += 4 - choice

    type = ""
    if scores["R"] >= scores["T"]:
        type += "R"
    else:
        type += "T"

    if scores["C"] >= scores["F"]:
        type += "C"
    else:
        type += "F"

    if scores["J"] >= scores["M"]:
        type += "J"
    else:
        type += "M"

    if scores["A"] >= scores["N"]:
        type += "A"
    else:
        type += "N"

    return type

 

딕셔너리에 바로 "R", "T" 등 넣어서 비교하면 굳이 튜플 쓸 필요없이 편하게 할 수 있었다...

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 가장 많이 받은 선물  (0) 2024.11.03
[Python] 신고 결과 받기  (0) 2024.11.02
[Python] 1번 / 동영상 재생기  (0) 2024.11.02
[Python] 개인정보 수집 유효기간  (1) 2024.11.02
[Python] 10번 / 공원  (0) 2024.11.02