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



📩 -->問題の説明


開発者が使用する言語と言語の好みを入力すると、対応する職業群を推奨するアルゴリズムを開発します.
次の表に、5つの共通言語(5つの職業ごと)の職業言語スコアを示します.
分数SICONTHARDWAREPORTALGAME 5 JAVAVACSCRIPTCSJAVAC++4 JAVACSCRIPTJAVAC++JAVACSCRIPTC 3 LPYSHONPYTHONJVASCRITYTHONYTHONYTHONCYCYCYCYCYCYCYCYTHONCYCY
たとえば、SQLのSI職業言語は3点、CONTTS職業言語は2点です.SQLのHARDWARE、PORTAL、およびGAMEの職業言語スコアは0です.
パラメータは、職業群の言語スコアを整理した文字列テーブル、開発者が使用する言語を含む文字列配列言語、および言語の好みを持つ整数配列プリファレンスを含む文字列配列言語プリファレンスです.開発者が使用する言語嗜好度x職業群言語点数の総和が最も高い職業群は、解関数を完了してください.複数の職業群の合計が同じ場合は、名前の辞書順に最速の職業群を返します.

せいげんじょうけん

  • 表の長さ=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つ以上を含む.
  • 言語の要素は重複しない.
  • 好みの長さ=言語の長さ
  • 1≦好みの元素≦10
  • preferenceのi要素は言語のi要素の言語嗜好である.
  • 返す文字列には、「SI」、「CONTENTS」、「HARDWARE」、「PORTAL」、「GAME」が含まれる.
  • I/O例


    tablelanguagespreferenceresult["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"

    💡 ソリューション(使用言語:python)

    def solution(table, languages, preference):
        result=[]
        job=['SI','CONTENTS','HARDWARE','PORTAL','GAME']
        for i in table:
            res=[]
            for j in i.split(' '):
                res.append(j)
            res.reverse()
            total=0
            for c in languages:
                for d in res:
                    if c==d:
                        total+=preference[languages.index(c)]*(res.index(d)+1)
            result.append(total)
        answer=list(zip(result,job))
        answer= sorted(answer, key = lambda x : (-x[0],x))
        return answer[0][1]
        

    👉 説明:

  • 問題の要求に従い、職業群の言語点数を求め、合計を結果リストに入れた.
  • ジョブと結果をjip関数で解答リストに組み合わせると、合計点数が高くなり、辞書順に最大値が返されます.
  • 結果



    別の解釈

    def solution(table, languages, preference):
        answer = 'ZZZZZZZZ'
        score_dic = {lang: score for lang, score in zip(languages, preference)}
        max_score = 0
        for row in table:
            r = row.split(' ')
            curr_score = 0
            for i in range(1, len(r)):
                curr_score += score_dic.get(r[i], 0) * (6-i)
            if max_score < curr_score:
                max_score = curr_score
                answer = r[0]
            elif max_score == curr_score and answer > r[0]:
                answer = r[0]
    
    
        return answer
    get関数を利用する方法もあります!

    🌈 に感銘を与える


    Chagで行って疲れたのですぐに解ける質問!
    出典:プログラマ
    間違いがあればメッセージをお願いします🙂