본문 바로가기

코딩테스트 문제

[Python] 프로그래머스 - 성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP)

프로그래머스 - 성격 유형 검사하기 / 문제 유형 : 구현 / 2022 KAKAO TECH INTERNSHIP / Level 1

 

2022 KAKAO TECH INTERNSHIP에서 나온 문제이다.

문제 바로가기 - https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

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

programmers.co.kr

 

문제

Solution

우선 survey에 있는 결과를 문자를 하나씩 분류하여 점수를 계산해준다. (ex. "A" : 2)

 

점수를 계산할 때, 1~3이면 앞에 있는 문자에 점수를 더하고 5~7이면 뒤에 있는 문자에 점수를 더해주는데,

1 -3점, 2-2점, 3-1점으로 계산해주기 위해서 4에서 choices를 빼주었다.

마찬가지로 5-1점,  6-2점, 7-3점이므로 choices에서 4를 빼주었다.

 

문자별 점수를 다 계산한 후 미리 저장해 둔 mbti지표를 순회한다.

점수가 같은 경우 알파벳 순서로 결정하므로 알파벳이 빠른 순서대로 mbti지표에 저장하였다.

 

이제 알파벳의 점수를 저장한 dictionary에서 각 지표의 점수를 비교하여, 뒤 알파벳의 점수가 더 높으면 뒤 알파벳을 추가하고

아닌 경우 앞 알파벳을 추가한다.

점수가 같을때도 앞 알파벳을 출력하므로 뒤 알파벳은 점수가 높을 때만 추가해주면 된다.

 

from collections import defaultdict

def solution(survey, choices):
    answer = ''
    mbti = [["R","T"],["C","F"],["J","M"],["A","N"]]
    result = defaultdict(int)
    
    for i in range(len(survey)):
        survey_item = list(survey[i])
        data = choices[i]
        if data <= 4:
            result[survey_item[0]] += 4-data
        else:
            result[survey_item[1]] += data-4
    
    for i in range(4):
        c1,c2 = mbti[i][0],mbti[i][1]
        if result[c1] < result[c2]:
            answer += c2
        else : answer += c1
            
    return answer

생각보다 구현은 간단하였다.