[프로그래머스] - 성격 유형 검사하기 (구현, Python)

보양쿠·2022년 10월 25일
0

PROGRAMMERS

목록 보기
3/13

2022 KAKAO TECH INTERNSHIP 풀이

Level 1 - 성격 유형 검사하기 풀이
Level 2 - 두 큐 합 같게 만들기 풀이
Level 3 - 코딩 테스트 공부 풀이
Level 3 - 등산코스 정하기 풀이
Level 4 - 행렬과 연산 풀이

프로그래머스 - 성격 유형 검사하기 링크
(2022.10.25 기준 Level 1)

문제

MBTI처럼 카카오 성격 유형 검사가 있다. 각 문항의 지표와 선택한 문항에 따라 점수가 매겨질 때, 검사자의 성격 유형 검사 결과를 반환

알고리즘

문항마다 선택한 결과에 따라 점수를 매겨 검사 결과를 보여주는 함수를 구현하면 된다.

풀이

survey에는 'RT'나 'CF' 같이 판단할 지표가 담겨져 있고, choices에는 선택한 문항의 번호가 담겨져 있다.
문제를 요약해보면

  1. 문항 번호가 1~3 이면 지표의 앞부분 점수에 3~1을 더하고, 문항 번호가 4~7이면 지표의 뒷부분 점수에 1~3을 더한다.
  2. RT, CF, JM, AN 각각 비교하여 더 높은 점수를 가진 유형이 결과가 된다. 단, 같은 점수이면 사전순으로 앞서는 유형을 결과로 나타내면 된다.

먼저, 맵을 만들어줘야 한다. Python3는 dictionary.

scores = [0] * 8
dic = {'R': 0, 'T': 1, 'C': 2, 'F': 3, 'J': 4, 'M': 5, 'A': 6, 'N': 7}

문항 번호는 [1, 2, 3, 4, 5, 6, 7] 중 하나다. 중간 문항 번호는 4이므로 -4를 하면 [-3, -2, -1, 0, 1, 2, 3]
절댓값을 취하면 더해야 하는 점수와 같아진다.
그러므로 결국은 -4를 했을 때 음수이면 지표의 앞부분 점수에 빼주고, 양수이면 지표의 뒷부분 점수에 더하자.

for i in range(len(survey)):
    score = choices[i] - 4
    if score < 0:
        scores[dic[survey[i][0]]] -= score
    elif score > 0:
        scores[dic[survey[i][1]]] += score

그리고 점수를 각각 비교해서 유형 검사 결과를 반환하면 된다.

코드

def solution(survey, choices):

    # 유형별 점수 및 유형별 index
    scores = [0] * 8
    dic = {'R': 0, 'T': 1, 'C': 2, 'F': 3, 'J': 4, 'M': 5, 'A': 6, 'N': 7}

    # 질문에 따라 점수를 더해주자.
    for i in range(len(survey)):
        score = choices[i] - 4
        if score < 0:
            scores[dic[survey[i][0]]] -= score
        elif score > 0:
            scores[dic[survey[i][1]]] += score

    # 검사 결과
    # 점수가 같으면 사전순으로 앞서는 문자를 저장해야 한다.
    answer = ''
    answer += 'T' if scores[0] < scores[1] else 'R'
    answer += 'F' if scores[2] < scores[3] else 'C'
    answer += 'M' if scores[4] < scores[5] else 'J'
    answer += 'N' if scores[6] < scores[7] else 'A'
    return answer
profile
GNU 16 statistics & computer science

0개의 댓글