본문 바로가기
개인 공부/알고리즘 트레이닝

[python] programmers - 성격 유형 검사하기

by 아메리카노와떡볶이 2022. 9. 6.
728x90
programmers - 성격 유형 검사하기

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

 

프로그래머스

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

programmers.co.kr

 

요즘 핫한 MBTI 성격 유형 검사를 모티브로 해서 만든 문제인 것 같습니다.

자세한 설명은 위의 링크를 참조해주세요.

문제설명

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

 

이때 각 지표를 결정하는 문제가 survey로 주어지고, 그 문제에 대한 선택지가 choices 배열로 주어집니다.

survey 에 대한 선택지에 맞게 성격유형을 판별하여 반환하면 되는 문제입니다.

 

풀이코드

def solution(survey, choices):
    ans = ''
    # survey에는 n개의 질문 + 7개의 선택지
    # 각 질문은 1~4번 지표중 1가지 지표에 대한 성격 유형 점수 판단 
    # 한 지표에서 성격 유형 점수가 같으면, ex) R,T가 같으면 사전순 
    dic ={'R': 0, 'T': 0,
          'C': 0, 'F': 0,
          'A': 0, 'N': 0,
          'J': 0, 'M': 0,
         }
    
    # ex) RT 지표 survey에서 비동의시 R 동의시 T
    for idx,su in enumerate(survey):
        if choices[idx] >= 4:
            dic[su[1]] += choices[idx] - 4
        else:
            dic[su[0]] += 4 - choices[idx]

    #성격유형 결과 출력
    if dic['R'] >= dic['T']:
        ans += 'R'
    else:
        ans += 'T'
        
    if dic['C'] >= dic['F']:
        ans += 'C'
    else:
        ans += 'F'

    if dic['J'] >= dic['M']:
        ans += 'J'
    else:
        ans += 'M'

    if dic['A'] >= dic['N']:
        ans += 'A'
    else:
        ans += 'N'
       
    return ans

choices 배열에서 중간값 4를 기준으로 동의와 비동의를 분리하는 것이 핵심입니다.

끝에 if문을 여러개 나열했는데 깔끔하게 반복문으로 풀고싶어서 고민해봤지만 잘 모르겠습니다 ㅠ

728x90

댓글