코딩,해볼까

08.15. 프로그래머스 : 성격 유형 검사하기 (실패) 본문

Back/TIL

08.15. 프로그래머스 : 성격 유형 검사하기 (실패)

떠굥 2023. 8. 15. 00:32

🔎 성격 유형 검사하기

4개의 지표, 7개의 선택지로 성격 유형 검사의 결과를 구하라.

    """
    survay = 유형, 순서 ["AN", "CF", "MJ", "RT", "NA"]
    choices = 검사자가 선택한 번호 [5, 3, 2, 7, 5]
    1. 매번 바뀌는 survay에 따라 성격유형 점수를 구할 수 있는 함수를 만들어야 한다.
    2. 만든 검사지와 성격유형 점수를 매치하여 유형과 점수를 딕셔너리에 넣으면 좋겠다. {유형 : 점수}
    3. 큰 점수의 유형을 맨 앞으로 배치한다.(만약 같다면 사전순으로 배치한다.)
    """

💡 문제풀이#n... 실패

딕셔너리를 활용하여 문제를 풀 계획을 세웠다.

    """
    type_score의 key = survay[i]
    key로 value 찾기 (choices[i]의 숫자가 key)
    type_score의 value = choices[i]
    """

처음에는 이렇게 풀었다가,

    for i in range(len(choices)):
        v = score.get(choices[i])
        if choices[i] < 4:
            k = survey[i][0]
        else:
            k = survey[i][1]
        # type_score.setdefault(k,v) 기본값 (key value가 없지만 넣어놓고 싶을 때, 이친구는 type_score를 선언하지 않아도 된다.) type_score를 만들어줘 라는 의미가 있다.
        if k not in type_score:
            type_score[k] = v
            # print('if', k, v)
        else:
            type_score[k] += v
            # print('else', k, v)
        # 존재한다면 없다면
        # SyntaxError: cannot assign to function call 함수 호출에 할당할 수 없음
    return answer

가독성이 조금 더 좋아질 수 있도록 수정하였다.

def solution(survey, choices):
    answer = ''
    score = {1:3, 2:2, 3:1, 4:0, 5:1, 6:2, 7:3}
    type_score = {}
    for i in range(len(choices)):
        v = score.get(choices[i])
        k = survey[i][0] if choices[i] < 4 else survey[i][1]
        
        if k not in type_score:
            type_score[k] = v
        else:
            type_score[k] += v

여기까지 결과는?

print(type_score)

# 테스트 1 출력 : {'N': 1, 'C': 1, 'M': 2, 'T': 3, 'A': 1}
# 테스트 2 출력 : {'R': 6, 'T': 1}

계획 2번 주어진 survey와 choices 유형과 점수를 딕셔너리에 잘 넣었다. {유형 : 점수}

이제 유형과 점수, 그리고 유무에 따라서 if else 문을 적절히 사용해주면 문제를 풀 수 있겠다!! (고 굉장히 가볍게 생각했는데.. 여기서부터 막히기 시작했다.😭)

    # 둘 다 있으면, 둘 다 없으면, r만 있으면, t만 있으면
    for key, value in type_score.items():
        if 'R' and 'T' in key:
            r_score = type_score.get('R') or 0
            t_score = type_score.get('T') or 0
            if r_score >= t_score:
            	# answer += 'R'
                print(answer) # R을 += 해준 적이 없는데 왜 벌써 들어가있지?
            else: 
                answer += 'T'

        elif 'R' not in key: 
            if 'T' in key: answer += 'T'
        # elif 'T' not in key: 
        #     if 'R' in key: answer += 'R'
        else:
            answer += 'R'

여기서의 문제점, 나는 분명 answer에 +를 한 글자씩 하고 있는데, 테스트 2번에 자꾸 'RR' R이 2번 들어가는 이상한 오류가 났다. 그래서 R이 중복되는 위치를 찾고자 print로 테스트를 해본 결과,  answer += 'R' 이 들어가는 자리에 아무것도 넣지 않았는데, R이 그냥 들어가고 있었다. 앞에서 R을 넣어준 적이 없는데 왜 이렇게 되는 것인지를 아직 찾지 못했다...

💡 배운 점

1. 딕셔너리 활용 방법

2.  if 작은 단위 in 큰 단위

오늘 배운 점들은 한번 포스팅하면서 정리해야겠다.

 

대한독립만세! - 8.15 광복절 -

 

Comments