본문 바로가기

코딩 테스트/프로그래머스 파이썬 문제 풀이

[프로그래머스 코딩 테스트] 성격 유형 검사하기 - KAKAO TECH INTERNSHIP

성격 유형 검사하기

문제 설명

나만의 카카오 성격 유형 검사지를 만들려고 합니다. 성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다. (문제는 본 사이트에서 정확하게 확인한다고 가정하고 간단하게만 정리하자면) like MBTI

4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다. 검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.

  • 매우 동의매우 비동의 선택지를 선택하면 3점을 얻습니다.
  • 동의비동의 선택지를 선택하면 2점을 얻습니다.
  • 약간 동의약간 비동의 선택지를 선택하면 1점을 얻습니다.
  • 모르겠음 선택지를 선택하면 점수를 얻지 않습니다.

 


 

문제 풀이

내가 작성한 코드

def solution(survey, choices):
    ch = ['RT', 'CF', 'JM', 'AN']
    res = []
    answer = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
    for i in range(len(survey)):
        if choices[i]//4 == 0:
            answer[survey[i][0]] += abs(choices[i]%4 - 4)
        else:
            answer[survey[i][1]] += choices[i]%4
    for k in range(4):
        if answer[ch[k][0]] >= answer[ch[k][1]]:
            res.append(ch[k][0])
        else:
            res.append(ch[k][1])

    return ''.join(res)

처음에는 answer에 딕셔너리 구조라는 선언만 하고 진행했었는데, 그렇게 되면 한 번도 점수를 안 받는 아이들이 나타나고, 그 결과 모든 유형의 점수를 가려야 하는 마지막 for문에서 answer에 존재하지 않는 키를 불러 와서 오류가 뜨게 된다.

그래서 결국 answer에 각 유형들을 0으로 초기화해 줌으로써 통과함

 

남이 작성한 코드

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

유형의 결과가 어피치형(A), 네오형(N)을 예로 들었을 때, AN/NA 순으로 바뀌어서 들어오기도 한다. 그래서 나는 한 글자씩 떨어뜨려서 딕셔너리로 만들었지만, 이 사람은 들어오는 유형이 역순일 때 바꿔 주고 나서 바로 계산으로 들어가고, 딕셔너리 value 값으로 음수/양수라는 차이를 줘서 음수가 들어가 있다면 첫 번째 글자가 결과에 담기게, 양수가 들어가 있다면 두 번째 글자가 결과가 담기게 만들었다.

그리고 문제에 나와 있는 두 유형의 수가 동일할 때 사전 순서에서 가장 먼저 오는 유형을 둔다는 조건을 활용하여 sorted 함수를 써 결과값에 넣어 준다.