알고리즘/프로그래머스

[Programmers] Lv.1 성격 유형 검사하기 _Python

3o14 2023. 5. 23. 17:22
728x90
반응형

 

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

 

🧶 문제 설명

나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.

지표 번호 성격 유형
1 지표 라이언형(R), 튜브형(T)
2 지표 콘형(C), 프로도형(F)
3 지표 제이지형(J), 무지형(M)
4 지표 어피치형(A), 네오형(N)

4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.

검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.

 

각 질문은 아래 표처럼 점수를 매길 수 있습니다.

선택지 성격 유형 점수
매우 비동의 네오형 3
비동의 네오형 2
약간 비동의 네오형 1
모르겠음 어떤 성격 유형도 점수를 얻지 않습니다
약간 동의 어피치형 1
동의 어피치형 2
매우 동의 어피치형 3

 

 

제한사항

  • 1 ≤ survey의 길이 ( = n) ≤ 1,000
  • choices의 길이 = survey의 길이
 choices  
 1  매우 비동의
 2  비동의
 3  약간 비동의
 4  모르겠음
 5  약간 동의
 6  동의
 7  매우 동의

 

입출력 예

survey choices result
["AN", "CF", "MJ", "RT", "NA"] [5, 3, 2, 7, 5] "TCMA"
["TR", "RT", "TR"] [7, 1, 3] "RCJA"

 

 

🧶 풀이법

1. 객체에 각 지표를 key값으로, 점수를 value로 세팅합니다.

2. 각 객체를 돌면서 -4를 해준 값을 해당 key값의 value에 더해줍니다.

   예를 들어, choices가 1점일 경우 -4를 하면 -3이 되므로 해당 key의 value에 -3을 더하게 됩니다.

3. 지표가 올바른 순서일 경우와 아닌 경우를 나누어 수행합니다. (한 지표에서도 "AN"과 "NA" 모두 생각해야 하기 때문)

4. 다시 객체를 순회하며 값이 0보다 클 경우 오른쪽 지표를, 0보다 작거나 같을 경우 왼쪽 지표를 answer 변수에 대입합니다.

 

 

 

🧶 코드

def solution(survey, choices):
    answer = ''
    
    mbti = {
        "RT": 0,
        "CF": 0,
        "JM": 0,
        "AN": 0,
    }
    
    for i in range(len(survey)) :
        if survey[i] in mbti:
            mbti[survey[i]] += choices[i] - 4
        else :
            survey[i] = survey[i][::-1]
            mbti[survey[i]] -= choices[i] - 4
        
    print(mbti)
    for e in mbti:
        list(e)
        if mbti[e] > 0 :
            answer += e[1]
        else :
            answer += e[0]
        
    return answer

 

 

🧶 후기

풀면서 삼항연산자에 대한 이해도가 낮았다는 사실을 깨달음 ㅇ-ㅇ

 

 

 

프로그래머스

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

programmers.co.kr

 

LIST