Posts 4Week 직업군 추천하기 [Python]
Post
Cancel

4Week 직업군 추천하기 [Python]

URL : https://programmers.co.kr/learn/courses/30/lessons/84325

문제 설명

  • 개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
  • 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부여한 표입니다.
점수SICONTENTSHARDWAREPORTALGAME
5JAVAJAVASCRIPTCJAVAC++
4JAVASCRIPTJAVAC++JAVASCRIPTC#
3SQLPYTHONPYTHONPYTHONJAVASCRIPT
2PYTHONSQLJAVAKOTLINC
1C#C++JAVASCRIPTPHPJAVA
  • 예를 들면, SQL의 SI 직업군 언어 점수는 3점이지만 CONTENTS 직업군 언어 점수는 2점입니다. SQL의 HARDWARE, PORTAL, GAME 직업군 언어 점수는 0점입니다.
  • 직업군 언어 점수를 정리한 문자열 배열 table, 개발자가 사용하는 언어를 담은 문자열 배열 languages, 언어 선호도를 담은 정수 배열 preference가 매개변수로 주어집니다. 개발자가 사용하는 언어의 언어 선호도 x 직업군 언어 점수의 총합이 가장 높은 직업군을 return 하도록 solution 함수를 완성해주세요. 총합이 같은 직업군이 여러 개일 경우, 이름이 사전 순으로 가장 빠른 직업군을 return 해주세요.

제한사항

  • table의 길이 = 5
  • table의 원소는 “직업군 5점언어 4점언어 3점언어 2점언어 1점언어”형식의 문자열입니다. 직업군, 5점언어, 4언어, 3점언어, 2점언어, 1점언어는 하나의 공백으로 구분되어 있습니다.
  • table은 모든 테스트케이스에서 동일합니다.
  • 1 ≤ languages의 길이 ≤ 9
  • languages의 원소는 “JAVA”, “JAVASCRIPT”, “C”, “C++” ,”C#” , “SQL”, “PYTHON”, “KOTLIN”, “PHP” 중 한 개 이상으로 이루어져 있습니다.
  • languages의 원소는 중복되지 않습니다.
  • preference의 길이 = languages의 길이
  • 1 ≤ preference의 원소 ≤ 10
  • preference의 i번째 원소는 languages의 i번째 원소의 언어 선호도입니다.
  • return 할 문자열은 “SI”, “CONTENTS”, “HARDWARE”, “PORTAL”, “GAME” 중 하나입니다.

문제풀이

  • 우선 주어진 table을 split하여 dict 형태로 바꾸어준다, 이때 value를 zip하여 매칭시켜준다.
  • 이후 매칭된 dict를 통해 해당 언어의 점수를 가지고와 preference의 점수만큼 곱하며, 기본으로 만들어놓은 점수에 더해준다.
  • 이후 가장 높은 점수를 가진 언어를 sorted를 통해 return해준다, 이때 basic_jobs는 이미 알파벳순으로 정렬된 상태로 해야 한다.(같은 점수일경우 알파벳순으로 정렬되게 하기 위함)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(table, languages, preference):
    basic_tables = []
    basic_values = [5,4,3,2,1]
    basic_jobs = {"CONTENTS" : 0, "GAME":0, "HARDWARE":0, "PORTAL":0 , "SI" : 0}

    for i in table:
        keys = i.split(' ')
        temp = {'jobs' : keys[0]}
        temp.update(dict(zip(keys[1:], basic_values)))
        basic_tables.append(temp)

    for tables in basic_tables:
        for point ,language in enumerate(languages):
            try:
                basic_jobs[tables['jobs']] += preference[point] * tables[language]
            except:
                pass
    return sorted(basic_jobs.items(), key=lambda x : x[1], reverse=True)[0][0]
1
2
3
4
table = ["SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", "PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP", "GAME C++ C# JAVASCRIPT C JAVA"]
languages = ["PYTHON", "C++", "SQL"]	
preference = [7, 5, 5]
solution(table, languages, preference)
1
'HARDWARE'
1
2
3
4
table = ["SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", "PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP", "GAME C++ C# JAVASCRIPT C JAVA"]
languages = ["JAVA", "JAVASCRIPT"]
preference = [7, 5]
solution(table, languages, preference)
1
'PORTAL'
This post is licensed under CC BY 4.0 by the author.