STUDY/Algorithm

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

ez1n 2022. 12. 15. 05:06

 

[Python_ 성격 유형 검사하기]

 


<STUDY>

 

📢 문제 📢

 

성격 유형 검사는 다음과 같은 4개의 지표로 구분한다.

 

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

 

검사진에는 총 n개의 질문이 있고, 각 질문에는 7개의 선택지가 있다.

 

선택지 성격 유형 검사
매우 비동의 3점
비동의 2점
약간 비동의 1점
모르겠음 0점
약간 동의 1점
동의 2점
매우 동의 3점

 

검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단한다.

단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다. ex) A, N의 점수가 같은 경우 A로 판단

 

질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다.

 

이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.

 

** 제한 사항

1 <= survey의 길이 (n) <= 1000

  • survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나
  • survey[i]의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
  • survey[i]의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.

choices의 길이 = survey의 길이 (n)

  • choices[i] 는 검사자가 선택한 i+1번째 질문지의 선택지
  • 1 <= choices의 원소 <= 7

 

choices
1 매우 비동의
2 비동의
3 약간 비동의
4 모르겠음
5 약간 동의
6 동의
7 매우 동의

 

 

❗아이디어

 

   - 성격 유형을 딕셔너리 "key": value 형태로 만들어 점수를 계산한다.

 


 

<전체 코드>

 

def solution(survey, choices):
  answer = ''
  result = {"R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0}

  for category, score in zip(survey,choices):
    if score < 4: result[category[0]] += 4-score
    elif score > 4: result[category[1]] += score-4

  list = list(result.items())

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

  return answer

 


 

<코드 설명>

 

☝ 성격유형 딕셔너리로 만들기

 

result = {"R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0}

 

   - 각 유형 별로 value를 0으로 설정하여 초기 점수를 만든다.

 

 

✌ 점수 계산하기

 

for category, score in zip(survey,choices):
  if score < 4: result[category[0]] += 4-score
  elif score > 4: result[category[1]] += score-4

 

   - survey와 choices 배열을 zip() 함수를 통해 묶어준다.

   - 4보다 작은 경우 앞 유형에 점수를 주고 4보다 큰 경우 뒤 유형에 점수를 준다.

   - 부여되는 점수가 4를 기준으로 앞, 뒤가 다르기 때문에 앞은 4-점수, 뒤는 점수-4로 계산한다.

 

 

🤟 유형 결정하기

 

list = list(result.items())

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

 

   - 점수가 큰 유형을 선택하되, 같은 경우에는 사전 빠른 유형을 선택하기 때문에 뒤가 큰 경우와 그렇지 않은 경우로 나누어 결정한다.

 

 


 

🔆프로그래머스 Lv1. 성격 유형 검사하기🔆

 

👉ez1n github 구경하기👈

 

 

ez1n - Overview

Study -ing. ez1n has 13 repositories available. Follow their code on GitHub.

github.com