코테 준비/프로그래머스

[level 1] 성격 유형 검사하기

쿠쿠*_* 2023. 5. 2. 15:58

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

 

프로그래머스

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

programmers.co.kr

최근에 인기많은 MBTI관련해서 카카오에서 문제가 나왔나보다. 근데 문제는 재미있는데 푸는건 안 재미있는..🤔

 

문제를 짧게 구분해서 풀어보자면

1) choices에 따라서 각 유형에 점수를 더해줌

2) 전체 합산에 따라서 result를 뽑아냄(이때 같은 카테고리에 있는 점수가 동점일 경우에 사전순으로 빠른걸로 return해야함 )

 

# 틀린 풀이
def solution(survey, choices):
    type=['R','T','C','F','J','M','A','N']
    answer=[]
    d = {t : 0 for t in type} # 딕셔너리 생성
    for i in range(len(survey)):
        if choices[i]<4:
            d[survey[0]]+=choices[i]
        elif choices[i]>4:
            d[survey[1]]+=choices[i]-4 #choices[i]==4인 경우는 배제
        else:
            continue
    
    for i in range(0,7,2): # 딕셔너리는 순서가 없군..
        if d[type[i]]<d[type[i+1]]:
            answer.append(d[type[i+1]])
        elif d[type[i]]>d[type[i+1]]:
            answer.append(d[type[i]])
        else:
            temp=[type[i],type[i+1]]
            temp.sort()
            answer.append(temp[0])
    
    return ''.join(answer)

이렇게 코드를 짜봤는데 아래와 같이 자꾸 KeyError가 발생했다..ㅠㅠ

그러다가 오랜 고민끝에 결국 해결했다ㅎㅎㅎ

내가 위 코드에서 틀린 부분은 크게 두가지였는데

1. 딕셔너리 d에다가 점수를 합산하는 부분에서 '동의'부분에서는 정상적으로 되었지만 '비동의'부분에서는 4에서 choices[i]를 빼주는 것을 안 해주었던 부분

2. answer에다가 append시켜줄때 d는 단순히 점수를 합산하는 부분이기에 d[type[i]]저걸 그대로 쓰는게 아니라 type[i]만 쓰면 되는 부분

위 두개를 수정하니까 모든문제에 통과할수 있었다..!

간만에 구글링안하고 내 실력으로 푸니 뿌듯하다 ㅋㅋㅋㅋ 

# 옳은 풀이
def solution(survey, choices):
    type=['R','T','C','F','J','M','A','N']
    answer=[]
    d = {t : 0 for t in type} # 딕셔너리 생성
    for i in range(len(survey)):
        if choices[i]<4:
            d[survey[i][0]]+=(4-choices[i])
        elif choices[i]>4:
            d[survey[i][1]]+=choices[i]-4 #choices[i]==4인 경우는 배제
        else:
            continue
    # print(d) 딕셔너리 체크 정상적인 거 확인 완료
    
    for i in range(0,7,2): # 딕셔너리는 순서가 없군..
        if d[type[i]]<d[type[i+1]]:
            answer.append(type[i+1])
        elif d[type[i]]>d[type[i+1]]:
            answer.append(type[i])
        else:
            temp=[type[i],type[i+1]]
            temp.sort()
            answer.append(temp[0])
    #print(answer)
    
    return ''.join(answer)

'코테 준비 > 프로그래머스' 카테고리의 다른 글

[level 1] 콜라 문제  (1) 2023.05.02
[level 1] 숫자 짝꿍  (0) 2023.05.02
[level 1] 신고 결과 받기  (0) 2023.05.02
[level 1] 최소직사각형  (0) 2023.05.02
[level 1] 숫자 문자열과 영단  (0) 2023.05.01