성격 유형 검사하기
문제 설명
나만의 카카오 성격 유형 검사지를 만들려고 합니다. 성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다. (문제는 본 사이트에서 정확하게 확인한다고 가정하고 간단하게만 정리하자면) like MBTI
4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다. 검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
매우 동의
나매우 비동의
선택지를 선택하면 3점을 얻습니다.동의
나비동의
선택지를 선택하면 2점을 얻습니다.약간 동의
나약간 비동의
선택지를 선택하면 1점을 얻습니다.모르겠음
선택지를 선택하면 점수를 얻지 않습니다.
문제 풀이
내가 작성한 코드
def solution(survey, choices):
ch = ['RT', 'CF', 'JM', 'AN']
res = []
answer = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
for i in range(len(survey)):
if choices[i]//4 == 0:
answer[survey[i][0]] += abs(choices[i]%4 - 4)
else:
answer[survey[i][1]] += choices[i]%4
for k in range(4):
if answer[ch[k][0]] >= answer[ch[k][1]]:
res.append(ch[k][0])
else:
res.append(ch[k][1])
return ''.join(res)
처음에는 answer에 딕셔너리 구조라는 선언만 하고 진행했었는데, 그렇게 되면 한 번도 점수를 안 받는 아이들이 나타나고, 그 결과 모든 유형의 점수를 가려야 하는 마지막 for문에서 answer에 존재하지 않는 키를 불러 와서 오류가 뜨게 된다.
그래서 결국 answer에 각 유형들을 0으로 초기화해 줌으로써 통과함
남이 작성한 코드
def solution(survey, choices):
my_dict = {"RT":0,"CF":0,"JM":0,"AN":0}
for A,B in zip(survey,choices):
if A not in my_dict.keys():
A = A[::-1]
my_dict[A] -= B-4
else:
my_dict[A] += B-4
result = ""
for name in my_dict.keys():
if my_dict[name] > 0:
result += name[1]
elif my_dict[name] < 0:
result += name[0]
else:
result += sorted(name)[0]
return result
유형의 결과가 어피치형(A), 네오형(N)
을 예로 들었을 때, AN/NA 순으로 바뀌어서 들어오기도 한다. 그래서 나는 한 글자씩 떨어뜨려서 딕셔너리로 만들었지만, 이 사람은 들어오는 유형이 역순일 때 바꿔 주고 나서 바로 계산으로 들어가고, 딕셔너리 value 값으로 음수/양수라는 차이를 줘서 음수가 들어가 있다면 첫 번째 글자가 결과에 담기게, 양수가 들어가 있다면 두 번째 글자가 결과가 담기게 만들었다.
그리고 문제에 나와 있는 두 유형의 수가 동일할 때 사전 순서에서 가장 먼저 오는 유형을 둔다는 조건을 활용하여 sorted
함수를 써 결과값에 넣어 준다.
'코딩 테스트 > 프로그래머스 파이썬 문제 풀이' 카테고리의 다른 글
[프로그래머스 코딩 테스트] 코딩 테스트 공부 - KAKAO TECH INTERNSHIP (1) | 2023.11.25 |
---|---|
[프로그래머스 코딩 테스트] 두 큐 합 같게 만들기 - KAKAO TECH INTERNSHIP (1) | 2023.11.22 |