CodingTest/programmers

[프로그래머스/Programmers] 4주차_직업군 추천하기 - Python

ukunV 2021. 9. 4. 00:03

Link

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr

 

Solution

해당 문제는 Dictionary를 사용하면 필자의 풀이 보다 훨씬 빠른 시간복잡도로 해결할 수 있는 문제였다.

 

Other Solution을 참고하길 바라고 이번 문제를 통해 get()의 사용법을 알고 가길 바란다.

 

또한 lambda의 다중조건 정렬에서 하나는 내림차순, 다른 하나는 오름차순으로 정렬하는 방법을 사용하여 문제를 해결하였으니 해당 사항도 익히길 바란다.

def solution(table, languages, preference):
    table = [table[i].split(' ') for i in range(len(table))]

    scores = []
    for i in range(len(table)):
        total = 0
        for j in range(1, len(table[i])):
            for k in range(len(languages)):
                if languages[k] == table[i][j]:
                    total += preference[k] * (len(table[i]) - table[i].index(table[i][j]))
        scores.append((table[i][0], total))

    scores = sorted(scores, key=lambda x: (-x[1],x[0]))

    return scores[0][0]
📌 Tip: sorted(scores, key=lambda x: (-x[1],x[0]))

 

Other Solution

def solution(table, languages, preference):
    score = {}

    for t in table:
        for lang, pref in zip(languages, preference):
            if lang in t.split():
                score[t.split()[0]] = score.get(t.split()[0], 0) +  (6 - t.split().index(lang)) * pref

    return sorted(score.items(), key = lambda x: [-x[1], x[0]])[0][0]
📌 Tip: Dictionary, zip(), get()