https://school.programmers.co.kr/learn/courses/30/lessons/118666
최근에 인기많은 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 |