[プログラマー]推薦職業群Python


質問する


https://programmers.co.kr/learn/courses/30/lessons/84325
開発者が使用する言語と言語の好みを入力すると、対応する職業群を推奨するアルゴリズムを開発します.
次の表に、5つの共通言語(5つの職業ごと)の職業言語スコアを示します.

たとえば、SQLのSI職業言語は3点、CONTTS職業言語は2点です.SQLのHARDWARE、PORTAL、およびGAMEの職業言語スコアは0です.
パラメータは、職業群の言語スコアを整理した文字列テーブル、開発者が使用する言語を含む文字列配列言語、および言語の好みを持つ整数配列プリファレンスを含む文字列配列言語プリファレンスです.開発者が使用する言語嗜好度x職業群言語点数の総和が最も高い職業群は、解関数を完了してください.複数の職業群の合計が同じ場合は、名前の辞書順に最速の職業群を返します.

せいげんじょうけん

  • tableの長さ=5
    tableの要素は文字列で、フォーマットは「職業群5点言語4点言語3点言語2点言語1点言語」です.職業群、5分言語、4言語、3分言語、2分言語、1分言語はスペースです.
    tableはすべてのテストケースで同じです.
  • 1≦言語長≦9
    言語の要素には、Java、Java SCRIPT、C、C++、C#、SQL、PYTHON、KOTLIN、PHPの1つ以上があります.
    言語の要素は重複しません.
  • preferenceの長さ=言語の長さ
    1≦preferenceの要素≦10
  • preferenceのi要素は言語のi要素の言語の好みである.
  • 返す文字列には、SI、CONTENTS、HARDWARE、PORTAL、およびGAMEが含まれます.
  • I/O例



    アイデア

  • 与えられたテーブルを2次元配列に変換します.
  • for文チェックテーブル.
    2-1. 言語では、言語の対応するインデックスを求め、優先度(preference[idx])を言語スコアに乗算します.
    2-2. 言語に含まれていない場合は、テーブルの場所を0に変更します.
  • tableのスコアの和は、最高スコアでソートされ、最上位の要素値が出力されます.
  • ソリューション関数python

    def solution(table, languages, preference):
        for i in range(len(table)):
            table[i] = table[i].split(' ')	#2차원 배열로 변경
            for j in range(1, 6):
                if table[i][j] in languages:	#선호 언어인지 검사
                    idx = languages.index(table[i][j])
                    table[i][j] = (6-j)*preference[idx]
                else:	#선호 언어 아니면 0으로 변경
                    table[i][j] = 0
            table[i].append(sum(table[i][1:]))
        table.sort(key = lambda x : (-int(x[6]), x[0]))	#가장 높은 점수 출력
      
        return table[0][0]