본문 바로가기
파이썬알고리즘

Programmers Weekly challenge - 4주차

by zho 2021. 8. 25.

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

 

코딩테스트 연습 - 4주차

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

programmers.co.kr

재미있는 구현 문제


○ 문제풀이


def solution(table, languages, preference):
    returnTableCount = []
    returnTable = []
    tablesum = 0
    realtable = []
    # 있으면  index위치 반환, 없으면 0 반환 

    # 분야별로 정리
    for i in range(5):
      returnTable.append(table[i].split())
      realtable.append(returnTable[i][0])
      returnTable[i].reverse()
    for i in range(5):
      for j in range(len(languages)):
        if languages[j] in returnTable[i]:
          tablesum += (returnTable[i].index(languages[j]) + 1) * preference[j]
      returnTableCount.append(tablesum)
      tablesum = 0

    # returnTableCount = [29, 36, 41, 21, 25]
    answer = list(zip(realtable, returnTableCount))
    answer.sort(key = lambda x : (-x[1], x[0]))

    return answer[0][0]

분야별로 table을 재정렬 한 값과, 각 분야 점수를 list로 따로 받은 다음 zip함수를 이용해 sort 하여 구현했다.

 


 

○ 새롭게 배운 점

zip함수를 처음 사용해봤고 파이썬 정렬 문제에서는 정말 유용한 함수인 것 같다.

zip함수는 파이썬 내장 함수이다.

 

zip(*iterable)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.

※ 여기서 사용한 *iterable은 반복 가능(iterable)한 자료형 여러 개를 입력할 수 있다는 의미이다.

잘 이해되지 않는다면 다음 예제를 살펴보자.

>>> list(zip([1, 2, 3], [4, 5, 6]))

[(1, 4), (2, 5), (3, 6)]

 

>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

 

>>> list(zip("abc", "def"))

[('a', 'd'), ('b', 'e'), ('c', 'f')]

 

zip함수 출처 : https://wikidocs.net/32

 

05-5 내장 함수

지금까지 파이썬으로 프로그래밍하기 위해 알아야 하는 것들을 대부분 공부했다. 이제 여러분은 원하는 프로그램을 직접 만들 수 있을 것이다. 하지만 그 전에 먼저 여러분이 만들 ...

wikidocs.net

 

728x90