프로그래머스

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

띵지니어 2022. 8. 30. 15:45

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2022 KAKAO TECH INTERNSHIP

 

내 답안

def solution(survey, choices):
    score = {1:3, 2:2, 3:1, 4:0, 5:1, 6:2, 7:3}
    mid = 4
    list1 = ['R','T','C','F','J','M','A','N']
    list2 = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]
    answer = ''
    
    for i in range(len(choices)):
        if mid < choices[i]:
            list2[list1.index(survey[i][1])] += score[choices[i]]
        elif mid > choices[i]:
            list2[list1.index(survey[i][0])] += score[choices[i]]
        else:
            continue
            
    for i in range(0, 8, 2):
        if list2[i] < list2[i+1]:
            answer += list1[i+1]
        else:
            answer += list1[i]
    return answer

Review


문제가 길어서 읽는데 시간이 좀 걸렸고, 이해하고 나니 머릿속에서 어떻게 할지 대충 감은 왔었다.

'AN' 과 같은 문항에서 가운데 기준으로 오른쪽 문항을 선택하는지, 왼쪽 문항을 선택하는지, 또는 모르겠음 0점을 선택하는지

정도만 구현해 내면 쉽게 풀 수 있다고 생각했고

for i in range(len(choices)):
    if mid < choices[i]:
        list2[list1.index(survey[i][1])] += score[choices[i]]
    elif mid > choices[i]:
        list2[list1.index(survey[i][0])] += score[choices[i]]
    else:
        continue

간단히 구현하면 이렇게 된다.



score = { 매우 비동의(1) : 어피치형 3점, 비동의(2) : 어피치형 2점 ..... 매우 동의(7) : 네오형 3점 }

점수는 딕셔너리로 구현하였고

score = {1:3, 2:2, 3:1, 4:0, 5:1, 6:2, 7:3}



해당하는 성격유형을 판단하기 위해서 리스트 2개를 활용하여

라이언 형 : 몇점, 튜브형 : 몇점 ... 을 아래와 같이 표현하였다.

list1 = ['R','T','C','F','J','M','A','N']
list2 = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]

문제를 풀고 나서 리뷰를 했는데 사실 이 부분도 딕셔너리로 구현했으면 더 깔끔했을 것 같다고 생각했다.





그리고 마지막으로

'RT', 'CF', 'JM', 'AN'

어떤게 더 높은 점수인지, 혹은 같은지 조건문으로 판단하여 최종 지표를 리턴해주었다.

    for i in range(0, 8, 2):
        if list2[i] < list2[i+1]:
            answer += list1[i+1]
        else:
            answer += list1[i]
    return answer