규도자 개발 블로그
[프로그래머스/Level1/파이썬3(python3)] 직업군 추천하기 본문
[프로그래머스/Level1/파이썬3(python3)] 직업군 추천하기
문제
개발자가 사용하는 언어와 언어 선호도
를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
아래 표는 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점언어
는 하나의 공백으로 구분되어 있습니다.table
은 모든 테스트케이스에서 동일합니다.
1 ≤
languages
의 길이 ≤ 9languages
의 원소는"JAVA"
,"JAVASCRIPT"
,"C"
,"C++"
,"C#"
,"SQL"
,"PYTHON"
,"KOTLIN"
,"PHP"
중 한 개 이상으로 이루어져 있습니다.languages
의 원소는 중복되지 않습니다.
preference
의 길이 =languages
의 길이- 1 ≤
preference
의 원소 ≤ 10
- 1 ≤
preference
의 i번째 원소는languages
의 i번째 원소의언어 선호도
입니다.return 할 문자열은
"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 solution(table, languages, preference):
lang_score_dict = {}
for lang, score in zip(languages, preference):
lang_score_dict[lang] = score
scores = []
for record in table:
split = record.split()
sum_score = 0
for lang in languages:
if lang in split:
score = 6 - split.index(lang)
sum_score += score * lang_score_dict[lang]
print(lang, score)
scores.append(sum_score)
top_cats = []
for index, score in enumerate(scores):
if score == max(scores):
top_cats.append(table[index].split()[0])
top_cats.sort()
return top_cats[0]
설명
어질어질 복잡하고 긴 문제 설명에 겁먹을 필요가 없는 아주 단순한 문제이다. Table의 한 Record를 분리해보면 "SI JAVA JAVASCRIPT SQL PYTHON C#"
이런 모양이 되는데 한 개의 직업군에 다섯개의 언어라는 고정된 형태가 있어 차례대로 앞으로 5, 4, 3, 2, 1점이라고 생각하면 된다. 이것은 위 풀이 내에서 score = 6 - split.index(lang)
로 표현되었다.
만약에 해당 직업군의 언어에 매개변수로 주어진 언어가 포함돼있다면 Record순서에 의한 점수 * 매개변수 preference로 주어진 점수
를 전부 더하면 해당 직업군에 대한 언어 선호도가 된다. 이것을 전부 저장해놨다가 제일 큰 점수에 해당하는 직업군을 반환해주면 된다.
주의할 것은 예제 2에서 주어진 case인데 동일한 점수를 가진 직업군이 2개 이상이라면 사전순서로 먼저 오는 직업군을 리턴한다는 것이다.
'알고리즘 > 풀이' 카테고리의 다른 글
[SWEA/1974/파이썬3(python3)] 스도쿠 검증 (1) | 2021.08.30 |
---|---|
[SWEA/2007/파이썬3(python3)] 패턴 마디의 길이 (0) | 2021.08.25 |
[프로그래머스/Level2/파이썬3(python3)] 튜플 (0) | 2021.08.08 |
[프로그래머스/Level2/파이썬3(python3)] 예상 대진표 (0) | 2021.07.17 |
[해커랭크(Hackerrank)/30 Days of Code/파이썬3(python3)] Day 22: Binary Search Trees (0) | 2021.07.16 |