📚 출처 - 프로그래머스
개발자가 사용하는 언어와 언어 선호도
를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
아래 표는 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
의 길이 = 5table
의 원소는 "직업군 5점언어 4점언어 3점언어 2점언어 1점언어"
형식의 문자열입니다. 직업군
, 5점언어
, 4언어
, 3점언어
, 2점언어
, 1점언어
는 하나의 공백으로 구분되어 있습니다.languages
의 길이 ≤ 9languages
의 원소는 "JAVA"
, "JAVASCRIPT"
, "C"
, "C++"
,"C#"
, "SQL"
, "PYTHON"
, "KOTLIN"
, "PHP"
중 한 개 이상으로 이루어져 있습니다.languages
의 원소는 중복되지 않습니다.preference
의 길이 = languages
의 길이preference
의 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 해야 합니다.
- 같을때는 사전 순서대로 반환하라는 조건이 있어 정렬을 먼저 해주고 시작한다.
- split으로 리스트를 나눠주고
- languages가 table 내에 있는지 확인 후, 있으면 조건대로 계산 처리 및 리스트에 추가
- 리스트 내 값들을 비교 후, 가장 큰 값에 대응하는 table 값 반환하기
def solution(table, languages, preference):
# 0단계 - 총점이 같을시에 사전순으로 먼저 오는 값을 반환해야되기 때문에 먼저 정렬
table.sort()
tmp = []
# 1단계 - split
for i in range(len(table)):
table[i] = table[i].split()
# 2단계 - 반복문
for i in range(len(table)):
count = 0
for j in range(len(languages)):
if languages[j] in table[i]: # 없는 값을 index으로 찾으려 하면 오류가 발생하기 때문에 따로 if 문 추가
count += (len(table[i]) - table[i].index(languages[j])) * preference[j]
tmp.append(count)
print(tmp)
# 3단계 - 큰 값에 대응하는 분야 반환하기
return table[tmp.index(max(tmp))][0]