문제 링크 → 프로그래머스 2022 KAKAO INTERNSHIP 1번 성격 유형 검사하기
성격 유형 지표를 저장한 survey와 검사자가 정한 선택을 나타내는 choices를 전달받은 후, 문제에 주어진 점수를 매겨 검사자의 최종 성격 유형을 리턴하는 문제이다.
def select(metric, choice):
if metric[choice[0]] == metric[choice[1]]:
return choice[0]
elif metric[choice[0]] > metric[choice[1]]:
return choice[0]
else:
return choice[1]
def solution(survey, choices):
answer = ''
metric = {'R': 0, 'T': 0, 'C': 0, 'F' : 0, 'J' : 0, 'M': 0, 'A' : 0, 'N' : 0}
score = {1: 3, 2:2, 3:1, 4:0, 5:1, 6:2, 7:3}
for i in range(len(survey)):
c1, c2 = survey[i][0], survey[i][1]
if choices[i] > 4:
metric[c2] += score[choices[i]]
elif choices[i] < 4:
metric[c1] += score[choices[i]]
answer += select(metric, 'RT')
answer += select(metric, 'CF')
answer += select(metric, 'JM')
answer += select(metric, 'AN')
return answer
문제를 다 읽고 가장 먼저 생각난 거는 딕셔너리 활용하는 것이다. 각 지표에 대한 점수를 저장하는 딕셔너리 metric과 문제에서 주어진 각 선택지에 대한 점수를 저장한 딕셔너리인 score를 만들었다. 이후 각 survey의 원소(검사를 받는 성격 유형 지표)에 대해 4보다 크면 2번째 성격 유형 지표(c2)에 점수를 더하고, 4보다 작으면 1번째 성격 유형 지표(c1)에 점수를 더하도록 했다. → 문제에 주어진 내용이다.
최종 metric 딕셔너리가 결정되면 RT, CF, JM, AN의 지표들 중 하나씩을 결정하기 위해 select 함수를 호출하도록 했다. 점수를 비교해 더 큰 쪽의 지표 하나를 리턴하고, 만약 점수가 같으면 사전 순 중 앞쪽(알파벳 순으로 전달되므로 결국 choice[0]과 같음)을 리턴하도록 했다.
대략 20분 정도 걸려서 푼 것 같다. 문제 읽고 이해하는데 거의 12~3분이었고,, 푸는 데 7~8분 정도였다. Lv.1이라고 적혀져 있었던 만큼 가장 풀기 쉬웠던 문제이다. 다른 사람들의 경우 한글로 푸신 분도 있었고, survey 원소가 알파벳 순이 아니면 [::-1]을 사용해 역순으로 바꾼 후 주어진 점수-4를 빼서 코드를 작성하신 분도 있었다. 굉장히 다양한 풀이가 있었던 것 같다. 개인적으로는 앞에서 말한 것 중 두번째 코드가 굉장히 기억에 남는다.
내일은 2번 Lv.2인 두 큐 합 같게 만들기를 풀어봐야겠다.
프로그래밍 문제 풀이에 대한 자세한 과정과 풀이를 공유해주셔서 감사합니다. 딕셔너리를 활용한 효율적인 코드가 인상적이었습니다. 다양한 풀이법 중에서도 본인만의 풀이법을 찾아내고 공유해주신 점이 좋았습니다. 앞으로도 좋은 글 부탁드립니다. 잘 읽었습니다!