일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 다이나믹프로그래밍
- 백트랙킹
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- react #리액트 #동빈나
- 백준
- java #자바 #나동빈
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- css #생활코딩 #웹
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- 다익스트라
- dp
- BFS
- 코딩테스트
- DFS
- 투포인터
- Dijkstra
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 백준 #알고리즘 #파이썬 #코딩테스트
- 알고리즘
- 재귀
- 파이썬
- java #자바 #동빈나
- PYTHON
- 자바 #java
- css #웹 #생활코딩
- 파이썬 #백준 #알고리즘 #코딩테스트
- java #자바
- java #자바 #생활코딩
- 백준 #파이썬 #알고리즘 #코딩테스트
- 프로그래머스
- Today
- Total
커리까지
[프로그래머스] 위클리 챌린지 4주차\_직업군 추천하기 파이썬 본문
문제 설명
개발자가 사용하는 언어와 언어 선호도
를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
아래 표는 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
은 모든 테스트케이스에서 동일합니다.
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 | 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):
job_score = {}
pre_dict = {lang: pre for lang, pre in zip(languages, preference)}
for i in table:
score = i.split(' ')
job_score[score[0]] = {values: 5 - idx for idx, values in enumerate(score[1:])}
result = {}
for job, num in job_score.items():
temp = 0
for idx, values in num.items():
if idx in languages:
temp += values * pre_dict[idx]
result[job] = temp
answer = sorted(result.items(), key = lambda item: (-item[1],item[0]))[0][0]
return answer
- 우선 선호하는 언어와 점수를 직셔너리로 묶어서 관리한다.
- 그 다음에 각 직업군과 언어의 점수를 딕셔너리로 만든다.
- for문을 돌면서 직업군이 가진 언어가 선호 언어에 있으면 점수를 누적하여 result에 직업과 총합을 저정한다.
- result를 점수와 직업으로 정렬하여 리턴한다.
- 최대한 이중리스트를 쓰지 않으려고 했는데 방법이 생각이 안났다 ㅠㅠ
'알고리즘 > 풀이' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 6주차_복서 정렬하기 파이썬 (0) | 2021.10.17 |
---|---|
[프로그래머스] 위클리 챌린지 5주자_모음사전 (0) | 2021.10.09 |
[프로그래머스] 위클리 챌린지 2주차_상호평가 파이썬 (0) | 2021.10.02 |
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 튜플 파이썬 (2번째 풀이) (0) | 2021.09.26 |
[프로그래머스] 1주차_부족한 금액 계산하기 (0) | 2021.09.23 |