👨‍🏫ps/❄️프로그래머스

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

peacekim 2023. 3. 14. 20:48
반응형

문제

구현 문제였고, 다른 사람 풀이 보니 매우 쉽게 풀었다,, 객체를 사용하다보니 좀 더 오래 걸린 거 같지만 로직 자체는 간단하다.

시간 복잡도는 survery의 크기만큼 한번 for문을 돌아 O(N)이다

코드

def solution(survey, choices):
    answer = ''
    personalities = {}
    personalities["RT"] = Personality("R", "T")
    personalities["CF"] = Personality("C", "F")
    personalities["JM"] = Personality("J", "M")
    personalities["AN"] = Personality("A", "N")
    
    for idx in range(len(survey)):
        personality = personalities[survey[idx]] if survey[idx] in personalities else personalities[survey[idx][::-1]]
        left, right = survey[idx]
        
        score = choices[idx] - 4
        if score < 0 :
            personality.types[left] += abs(score)
        elif score > 0 :
            personality.types[right] += abs(score)
    for key, val in personalities.items():
        answer += val.getBiggerType()
    return answer

class Personality:
    def __init__(self, type1, type2):
        self.types = {}
        self.types[type1] = 0
        self.types[type2] = 0
    
    def getBiggerType(self):
        key1, key2 = self.types.keys()
        bigger = key1 if key1 < key2 else key2
        if self.types[key1] > self.types[key2]:
            bigger = key1
        elif self.types[key1] < self.types[key2]:
            bigger = key2
        return bigger
반응형