- 문제
나만의 카카오 성격 유형 검사지를 만드려고 합니다.
성격 유형 검사는 4개의 지표에 따라 두 유형 중 하나로 결정됩니다.
1번 지표 | 라이언형(R) | 튜브형(T) |
2번 지표 | 콘형(C) | 프로도형(F) |
3번 지표 | 제이지형(J) | 무지형(M) |
4번 지표 | 어피치형(A) | 네오형(N) |
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
매우 비동의, 비동의, 약간 비동의, 모르겠음, 약간 동의, 동의, 매우 동의
각 질문은 1가지 지표로 성격 유형 점수를 판단합니다.
예를 들어, 어떤 한 질문에서 4번 지표로 아래 표처럼 점수를 매길 수 있습니다.
이때 검사자가 질문에서 약간 동의 선택지를 선택할 경우 어피치형(A) 성격 유형 1점을 받게 됩니다. 만약 검사자가 매우 비동의 선택지를 선택할 경우 네오형(N) 성격 유형 3점을 받게 됩니다.
- 매우 동의나 매우 비동의 선택지를 선택하면 3점을 얻습니다.
- 동의나 비동의 선택지를 선택하면 2점을 얻습니다.
- 약간 동의나 약간 비동의 선택지를 선택하면 1점을 얻습니다.
- 모르겠음 선택지를 선택하면 점수를 얻지 않습니다.
- 검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단
survey | choices | return |
['AN', 'CF', 'MJ', 'RT', 'NA'] | [5, 3, 2, 7, 5] | 'TCMA' |
['TR', 'RT', 'TR'] | [7, 1, 3] | 'RCJA' |
- 답안
score = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
def solution(survey, choices):
answer = ''
for s, c in zip(survey, choices):
if c > 4:
score[s[1]] += c - 4
if c < 4:
score[s[0]] += 4 - c
score_li = list(score.items())
for i in range(0, len(score)-1, 2):
if score_li[i][1] >= score_li[i+1][1]:
answer += score_li[i][0]
else:
answer += score_li[i+1][0]
return answer
- 이 문제 키워드
- dict 자체로 접근까지는 어렵지 않았으나, dict.items()로 key, value를 모두 호출하고, list로 바꾸어 주어 인덱싱하는 과정이 필요했음
- 두 가지 객체를 같이 loop 할 때, zip 사용하기, 원소와 인덱스를 같이 loop 할 때, enumerate 사용하기, dict에서 key, value를 같이 loop 할 때, dict.items() 사용하기를 기억하자
- sort할 대상의 수가 적으면 선언할 때, 순서대로 적자
- 문자열은 .sort()가 되지 않는다 -> sorted()는 가능
- 문제 잘보기 -> 인덱스와 그에 해당하는 번호를 혼동하지 말자
'Programming > Algorithm' 카테고리의 다른 글
[프로그래머스] <햄버거 만들기> 99클럽 스터디-6 + stack 과 pop, list indexing (0) | 2024.04.01 |
---|---|
[프로그래머스] <숫자 문자열과 영단어> 99클럽 스터디-5 + 문자열, dict (0) | 2024.03.30 |
[프로그래머스] <최대값과 최소값> 99클럽 스터디-4 + 문자열, map 다루기 (0) | 2024.03.29 |
[프로그래머스] <멀리 뛰기> 99클럽 스터디-3 + DP 개념 이용하기 (0) | 2024.03.28 |
[프로그래머스] <달리기 경주> 99클럽 스터디-2 + dict와 list 섞어쓰기 (0) | 2024.03.27 |