Algorithm/Programmers
[프로그래머스] 위클리 챌린지 4주차 (파이썬) python
Nave
2021. 9. 6. 00:50
| 문제설명
| 제한사항
| 입출력의 예
|코드
def solution(table, languages, preference):
dict_table = {}
for i in range(len(table)) :
table[i] = table[i].split()
for i in range(len(table)) :
dict_table[table[i][0]] = {}
for j in range(1,len(table[i])) :
dict_table[table[i][0]][table[i][j]] = (6-j)
answer = {'SI':0, 'CONTENTS':0, 'HARDWARE':0, 'PORTAL':0, 'GAME':0}
for i in range(len(languages)) :
for key in dict_table :
if languages[i] in dict_table[key] :
answer[key] += dict_table[key][languages[i]] * preference[i]
ans = []
for key in answer :
ans.append((key, answer[key]))
ans = sorted(ans, key = lambda x : (-x[1], x[0]))
return ans[0][0]
| 코드설명
우선 이문제는 table표에 나온 요소가 많고, 주어지는 매개변수가 헷갈리는 문제여서
문제를 헷갈리지 않고 해결하기 위해 리스트 자료형으로 주어진 table을 이중 딕셔너리 dict_table에 넣어서
각각의 점수와 매칭시켜야 했다.
다음으로 주어진 languages와 dict_table을 for문으로 반복하면서, 각각의 languages의 원소들이 순환하는 dict_table에서
일치하는 key값이 있는지 확인한 다음,
있으면 그 key값의 value(점수)와 주어진 선호도를 곱한뒤, 새로운 딕셔너리 answer에 계속해서 더해준다.
(answer은 각각의 직업군이 key값으로 있는 딕셔너리 이다.)
그 다음, answer의 값들을 정렬하기 위해 딕셔너리를 리스트ans로 바꿔주고,
lambda함수를 이용하여 ans의 인덱스 0값을 우선적으로 내림차순정렬하고, 인덱스 1값을 사전순 정렬한 다음
ans의 맨 첫번째 값을 반환한다.