Coding Test/프로그래머스

[프로그래머스] 위클리 챌린지 4주차 : 직업군 추천하기(python)

hzoooo 2021. 9. 14. 18:08

[문제 설명]

 

코딩테스트 연습 - 4주차_직업군 추천하기

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

programmers.co.kr


[나의 답안]

def solution(table, languages, preference):
    pref_dict = {language : 0 for language in ["JAVA", "JAVASCRIPT", "C", "C++" ,"C#" , "SQL", "PYTHON", "KOTLIN", "PHP"]}

    for i, language in enumerate(languages):
        pref_dict[language] = preference[i]

    max_score = 0
    answer = ''
    for job in table:
        job_total_score = sum([pref_dict[lang] * (5-i) for i, lang in enumerate(job.split(" ")[1:])])
        if job_total_score > max_score:
            max_score = job_total_score
            answer = job[:job.index(' ')]
        elif job_total_score == max_score:
            answer = sorted([answer, job[:job.index(' ')]])[0]

    return answer

최대한 파이써닉 하게 짜려고 노력했다.

먼저, 언어 선호도 점수에 주어진 값들 뿐만 아니라, 주어지지 않은 languages들을 모두 넣어줬다.

9개 밖에 되지 않아서 속도에 큰 영향을 미치지 않을 것 같아, KeyError 없이 쉽게 계산하기 위해 넣어주었다.

 

그리고 출력 설명에 나온 직업군별 점수 식을

sum([pref_dict[lang] * (5-i) for i, lang in enumerate(job.split(" ")[1:])])로 작성하였다.

i는 0부터 4까지 가기 때문에, 각 직업군 언어 점수(pref_dict[lang]) * 언어 선호도(5-i) 계산 값들을 list로 만들며

list의 sum 값을 job_total_score에 넣었다.


※회고

1. dictionary.get 함수 사용하기

몇 줄 줄임과 동시에, key 값이 존재하지 않을 때 0을 return 해주기 때문에 KeyError를 걱정할 필요 없다.

더보기
def solution(table, languages, preference):
    pref_dict = {language : score for language, score in zip(languages, preference)}

    max_score = 0
    answer = ''
    for job in table:
        job_total_score = sum([pref_dict.get(lang, 0) * (5-i) for i, lang in enumerate(job.split(" ")[1:])])
        if job_total_score > max_score:
            max_score = job_total_score
            answer = job[:job.index(' ')]
        elif job_total_score == max_score:
            answer = sorted([answer, job[:job.index(' ')]])[0]

    return answer

 

2. 3주차 문제는 풀지 못했다.

3주차 문제를 2시간 넘게 쓰다가, 결국 못풀어서 4주차로 넘어오게 되었다.

코딩테스트에서 종종 보던 유형이여서, 다른 사람들의 코드를 보고 꼭 이해하려고 한다.