Algorithm/Programmers

[프로그래머스] 성격 유형 검사하기

밍츠 2022. 8. 22. 01:37

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

 

프로그래머스

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

programmers.co.kr

 

나의 풀이

문제 그대로를 풀이로 풀어나갔다

- 선택지 점수에 대한 딕셔너리, 지표 번호에 대한 성격 유형 딕셔너리, 성격 유형별 점수 딕셔너리를 만든다

- survey를 반복문으로 돌면서 해당 인덱스의 choice가 4 미만이면 해당 성격 유형에 비동의 점수를 더해준다.

- 4 이상이면 해당 성격 유형에 동의 점수를 더해준다.

-> 이 과정 좀 더 깔끔하게 가능할 듯

- 지표 번호에 대한 성격 유형 딕셔너리를 순회하면서 지표별로 성격 유형별 점수 딕셔너리에 대한 점수 값이 큰 성격 유형을 answer에 더해준다. 

-> 알파벳 순은 딕셔너리에 저장할 때 알파벳 순으로 저장하여 따로 처리 x

def solution(survey, choices):
    answer = ''
    score = {1 : 3, 2:2,3:1,4:0,5:1,6:2,7:3}
    q = {1:["R","T"],2:["C","F"],3:["J","M"],4:["A","N"]}
    me = {'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:
            me[survey[i][0]] += score[choices[i]]
            
        else:
            me[survey[i][1]] += score[choices[i]]
    
    for key, value in q.items():
        if me[value[0]] >= me[value[1]]:
            answer+=value[0]
        else:
            answer+=value[1]
    
    
    return answer

 

다른 풀이

- 풀이 방식은 똑같은데 딕셔너리 선언을 좀 더 간결화했다.

from collections import defaultdict

def solution(survey, choices):
    indicator = [('R', 'T'), ('C', 'F'), ('J', 'M'), ('A', 'N')]
    answer = ''
    personality = defaultdict(int)
    for s, c in zip(survey, choices):
        if c < 4:
            personality[s[0]] += (4 - c)
        elif c > 4:
            personality[s[1]] += (c - 4)
    for i in indicator:
        if personality[i[0]] >= personality[i[1]]:
            answer += i[0]
        else:
            answer += i[1]
    return answer