알고리즘/이것저것
[프로그래머스] 2022 KAKAO TECH INTERNSHIP 성격 유형 검사하기 - 파이썬(python)
아뵹젼
2022. 9. 1. 14:59
나의 풀이
def solution(survey, choices):
arr ={"R":0, "T":0,"C":0,"F":0,"J":0,"M":0,"A":0,"N":0}
result = ""
for i,j in zip(survey, choices) :
if j < 4 :
arr[i[0]] += (4 - j)
elif j > 4 :
arr[i[1]] += (j - 4)
arr2 = list(arr.items())
for i in range(0,len(arr2),2) :
if arr2[i+1][1] > arr2[i][1] :
result += arr2[i+1][0]
else :
result += arr2[i][0]
return result
각 유형별 알파벳을 key 값으로 0을 value 로 초기화 하였다.
그리고 choices 원소들을 for문으로 돌면서 점수에 맞게 dict 에 점수를 추가해주었다.
점수가 4점 미만일 경우 AN 중 첫 번째 알파벳에 (4-점수) 를 부여한다.
점수가 4점 초과일 경우 AN 중 두 번째 알파벳에 (점수-4) 를 부여한다.
그런 다음, for문으로 방금 점수를 부여한 dict 리스트를 순회하면서 어떤 알파벳의 점수가 더 높은지 확인하면 된다.
나는 i를 0~7까지 2칸 씩 증가하면서 확인하였다.
R이 인덱스 0번, T가 인덱스 1번
C가 인덱스 2번, F가 인덱스 3번인 셈이다.
둘 중 점수가 큰 알파벳을 result 에 추가해주었다.
로직은 쉽게 짰으나, 구현하는 데에 시간이 조금 걸렸다.
특히 엄청 멍청한 실수를 해서 시간을 많이 빼았겼다 ㅠㅠ
학생 때부터 가지고 있던 문제를 제대로 안 읽는 나쁜 습관이 아직도 남아있나 보다...
매우 비동의가 3점인데 매우 비동의를 1점으로 착각하여 몇 십분 째 끙끙됐다는...ㅎㅎ
다른 풀이
from collections import defaultdict
def solution(survey, choices):
indicator = [('R', 'T'), ('C', 'F'), ('J', 'M'), ('A', 'N')]
answer = ''
personality = defaultdict(int)
for s, c in zip(survey, choices):
if c < 4:
personality[s[0]] += (4 - c)
elif c > 4:
personality[s[1]] += (c - 4)
for i in indicator:
if personality[i[0]] >= personality[i[1]]:
answer += i[0]
else:
answer += i[1]
return answer
역시 나보다 깔끔하다...
defaultdict 를 사용한 것,
각 유형별 알파벳을 튜플 원소로 구성함으로써 그룹화로 인해 깔끔하고 직관적인 코드를 작성한 것.
나도 베스트 코드를 작성하는 그 날까지 더욱 노력해야겠다...ㅎ