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의 맨 첫번째 값을 반환한다.