
문제의 설명이 길어서 이해하는데 조금 어려움을 겪었던 문제입니다. 천천히 읽어보고 이해하면 크게 어렵지 않았습니다.
def solution(table, languages, preference):
dictions = {}; #테이블을 정리하여 담아줄 dictionary
jobs = []; #직업군 별 언어점수를 담아줍니다.
maxJobs = []; #동일한 언어점수를 가진 직업군을 판단하기위한 배열입니다.
#dictions에 직업군 이름에 언어들을 넣어줍니다.
for t in table:
now = t.split();
dictions[now[0]] = now[1:];
#직업군을 하나씩 꺼내어 언어 점수를 얻어줍니다.
for d in dictions:
nowValue = 0;
for i in range(0, len(languages)):
if languages[i] in dictions[d]:
nowValue += (5-dictions[d].index(languages[i])) * preference[i];
#계산이 끝난 직업군은 jobs에 추가해줍니다.
jobs.append([d, nowValue]);
#만들어진 jobs를 점수 순으로 정렬합니다.
jobs.sort(key = lambda x:(x[1]), reverse=True);
#점수가 가장 높은 직업군을 maxJobs에 추가합니다.
maxJobs.append(jobs.pop(0));
#그리고 jobs를 반복하며 총합이 최대값과 같은 직업군을 찾아 마찬가지로 maxJobs에 넣어줍니다.
for j in jobs:
if j[1] == maxJobs[0][1]:
maxJobs.append(j);
else:
break;
#마지막으로 maxJobs를 이름순으로 정렬하여준 뒤 첫번째 항목을 꺼내 반환합니다.
maxJobs.sort(key = lambda x:(x[0]));
return maxJobs[0][0];