나의 풀이
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 를 사용한 것,
각 유형별 알파벳을 튜플 원소로 구성함으로써 그룹화로 인해 깔끔하고 직관적인 코드를 작성한 것.
나도 베스트 코드를 작성하는 그 날까지 더욱 노력해야겠다...ㅎ
'알고리즘 > 이것저것' 카테고리의 다른 글
[프로그래머스] x만큼 간격이 있는 n개의 숫자 - 파이썬(python) (0) | 2022.09.01 |
---|---|
[프로그래머스] 행렬의 덧셈 - 파이썬(python) (0) | 2022.09.01 |
[Python] 백준 10825번: 국영수 (0) | 2021.03.09 |
[Python] 백준 10814번: 나이순 정렬 (0) | 2021.03.08 |
[Python] 백준 11651번: 좌표 정렬하기 2 (0) | 2021.03.08 |
댓글