[Python] 프로그래머스 - Weekly Challenge 4주차

728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/84325?language=python3 

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr

# 위클리 챌린지 4주차 문제이다. (3주차 문제는 너무 헬이어서 못 풀었다..)

 

# 문제에서 시킨대로 단순 구현만 하면 되는 문제이다. 어차피 문제에서 주어지는 table은 그대로라고 했으므로 

   SI, CONTENTS, HARDWARE, PORTAL, GAME의 딕셔너리를 미리 만들어 놓고 시작했다.

 

1. 선호하는 언어의 번호와 선호도를 tmp배열에 넣어준다.

   예제1번 같은 경우 tmp에는 [[1, 7], [3, 5], [7, 5]] 이 들어가있다.

 

2. SI부터 GAME까지 직업군을 반복문을 통해 돌며 pre_sum에 (각 직업군의 언어의 선호도 * 언어점수)

   를 더해준다.

 

3. pre[0]부터 pre[4]중 max(pre)값과 같은 값을 ans에 넣어주고 총합이 같은 직업군이 여러개일 경우

   이름이 사전순으로 가장 빠른 직업군을 return해야하므로 ans를 sort해주고 ans[0]을 return해준다.

 

def solution(table, languages, preference):
    tmp, pre = [], []
    answer = {0: 'SI', 1: 'CONTENTS', 2: 'HARDWARE', 3: 'PORTAL', 4: 'GAME'}
    languages_dict = {'PYTHON': 1, 'C': 2, 'C++': 3, 'C#': 4, 'JAVA': 5, 'JAVASCRIPT': 6, 'SQL': 7, 'KOTLIN': 8, 'PHP': 9}
    SI = {1: 2, 2: 0, 3: 0, 4: 1, 5: 5, 6: 4, 7: 3, 8: 0, 9: 0}
    CONTENTS = {1: 3, 2: 0, 3: 1, 4: 0, 5: 4, 6: 5, 7: 2, 8: 0, 9: 0}
    HARDWARE = {1: 3, 2: 5, 3: 4, 4: 0, 5: 2, 6: 1, 7: 0, 8: 0, 9: 0}
    PORTAL = {1: 3, 2: 0, 3: 0, 4: 0, 5: 5, 6: 4, 7: 0, 8: 2, 9: 1}
    GAME = {1: 0, 2: 2, 3: 5, 4: 4, 5: 1, 6: 3, 7: 0, 8: 0, 9: 0}
    
    for i, p in zip(languages, preference):
        tmp.append([languages_dict[i], p])

    for i in (SI, CONTENTS, HARDWARE, PORTAL, GAME):
        pref_sum = 0
        for l in tmp:
            pref_sum += i[l[0]] * l[1]
        pre.append(pref_sum)
    
    ans = []
    for i in range(5):
        if pre[i] == max(pre):
            ans.append(answer[i])
    ans.sort()
    return ans[0]
728x90
반응형
TAGS.

Comments