직업군 추천하기
개발자가 사용하는 언어와 언어 선호도
를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수
를 부여한 표입니다.
점수 | SI | CONTENTS | HARDWARE | PORTAL | GAME |
---|---|---|---|---|---|
5 | JAVA | JAVASCRIPT | C | JAVA | C++ |
4 | JAVASCRIPT | JAVA | C++ | JAVASCRIPT | C# |
3 | SQL | PYTHON | PYTHON | PYTHON | JAVASCRIPT |
2 | PYTHON | SQL | JAVA | KOTLIN | C |
1 | C# | C++ | JAVASCRIPT | PHP | JAVA |
예를 들면, 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
은 모든 테스트케이스에서 동일합니다.languages
의 길이 ≤ 9
languages
의 원소는 "JAVA"
, "JAVASCRIPT"
, "C"
, "C++"
,"C#"
, "SQL"
, "PYTHON"
, "KOTLIN"
, "PHP"
중 한 개 이상으로 이루어져 있습니다.languages
의 원소는 중복되지 않습니다.preference
의 길이 = languages
의 길이
preference
의 원소 ≤ 10preference
의 i번째 원소는 languages
의 i번째 원소의 언어 선호도
입니다."SI"
, "CONTENTS"
, "HARDWARE"
, "PORTAL"
, "GAME"
중 하나입니다.table | languages | preference | result |
---|---|---|---|
["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"] |
["PYTHON", "C++", "SQL"] |
[7, 5, 5] | "HARDWARE" |
["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"] |
["JAVA", "JAVASCRIPT"] |
[7, 5] | "PORTAL" |
입출력 예 #1
각 직업군 별로 점수를 계산해보면 아래와 같습니다.
아래 사진은 개발자 언어 선호도
나타낸 표입니다.
아래 사진은 개발자가 선호하는 언어의 직업군 언어 점수
를 나타낸 표입니다.
따라서 점수 총합이 41로 가장 높은 "HARDWARE"
를 return 해야 합니다.
입출력 예 #2
각 직업군 별로 점수를 계산해보면 아래와 같습니다.
아래 사진은 개발자 언어 선호도
나타낸 표입니다.
아래 사진은 개발자가 선호하는 언어의 직업군 언어 점수
를 나타낸 표입니다.
점수 총합이 55로 가장 높은 직업군은 "SI" 와 "PORTAL"입니다.
따라서 사전 순으로 먼저 오는 "PORTAL"
을 return 해야 합니다.
def get_value(point):
if point == 1:
return 5
elif point == 2:
return 4
elif point == 3:
return 3
elif point == 4:
return 2
elif point == 5:
return 1
else:
return 0
def solution(table, languages, preference):
total_point_dict = {}
for i in range(len(table)):
total_point = 0
for j in range(len(languages)):
try:
point = get_value(table[i].split(" ").index(languages[j]))
total_point += point * preference[j]
except ValueError:
pass
total_point_dict[table[i].split(" ")[0]] = total_point
max(total_point_dict,key=total_point_dict.get)
return sorted([k for k,v in total_point_dict.items() if max(total_point_dict.values()) == v])[0]
3주차에서 답을 보고도 풀이를 이해하지 못했으나, 이번문제는 다행히 바로 생각이 나서 풀수 있었다.
각 선호도의 점수를 return 하기위해서 get_value 함수를 선언하여 table에서 분야별로 langauges를 찾고, preference 값을 곱하여 미리선언한 total_point_dict 에 집어넣고 그중 가장 값이 큰 것을 찾아서 어느분야에서 가장 총합이 높았는지를 찾아냈다.
물론 문제풀이에 대한 아이디어는 있었지만 그 것들을 표현하기위해 dict을 을써야하나? 이중배열을 써야하나? 등등의 고민들을 많이 했고, 방법을 찾는 중 Python dict type을 활용하는게 가장 좋을거 같아서 이 방법을 사용했다.