[python] [카카오] 성격 유형 검사하기

김페페·2022년 9월 25일
0

카카오 기출

목록 보기
1/2

문제

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

처음 작성한 pseudo code

  1. 질문 개수만큼 반복
  2. 점수 카운트 dict를 생성하여,
    1. "1" : {"R" : 0, "T" : 0},
    2. "2" : {"C" : 0, "F" : 0},
  3. 각 survey 대답의 점수를 기록
  4. dict를 다시 반복하며,
    1. 큰 값의 키를 answer에 추가
    2. 같으면 ascii로 비교 후 추가

풀이

def solution(survey, choices):

    # 값을 기록할 딕셔너리 생성
    dic = {
        "R" : 0,
        "T" : 0,
        "C" : 0,
        "F" : 0,
        "J" : 0,
        "M" : 0,
        "A" : 0,
        "N" : 0,
    }

    # choices 개수만큼 반복하며, 딕셔너리에 기록
    for i in range(len(choices)):
        # 응답이 3보다 크면, 뒤의 성격 유형에 -3 뺀 만큼 점수 더하기
        if choices[i] > 4:
            dic[survey[i][1]] += (choices[i] - 4)
        # 응답이 3보다 작으면, 앞의 성격 유형에 abs(4 - 값) 점수 더하기
        elif choices[i] < 4:
            dic[survey[i][0]] += (4 - choices[i])
        # 같으면 pass        
        elif choices[i] == 4:
            pass

    result = []

    # 성격 유형 고르기 함수
    def pick(a, b):
        if dic[a] != dic[b]:
            result.append(max(a, b, key= lambda x : dic[x]))
        elif dic[a] == dic[b]:
            result.append(chr(min(ord(a), ord(b))))

    # 4번 반복하며 성격 유형 고르기
    pick("R", "T")
    pick("C", "F")
    pick("J", "M")
    pick("A", "N")

    answer = ""
    for i in result:
        answer += i

    return answer

얻은 것

  1. 수도 코드 작성할 때, 출력 결과를 예상해서 딕셔너리에 순서를 부여하려고 했음
    => 무순위로 작성하고, 출력 때 맞춰주면 됨

  2. 두 구간으로 나눠서 비교하는 문제 => max, min 함수가 최고

profile
독학 머신

0개의 댓글