プログラマ手順2「メニューのリフレッシュ」


質問する


プロセスメニューの更新

に答える


組み合わせで問題を解く.
itertoolsのコンビネーションライブラリを使用して、カリキュラム数と同じサイズの各受注の部分集合をすべて集合に入れ、Counterライブラリを使用して各カリキュラムのサイズについて最も重複する部分集合を求め、答え配列に入れればよい.

Pythonコード

from itertools import combinations
from collections import Counter


def solution(orders, course):
    sets = [[] for _ in range(len(course))]
    for i in range(len(orders)):
        a = sorted(list(orders[i]))
        for j in range(len(course)):
            tmp=combinations(a, course[j])
            sets[j].extend(tmp)
    
    answer = []
    for i in range(len(course)):
        x = Counter(sets[i])
        answer = answer + [''.join(list(j)) for j, y in x.items() if y == max(x.values()) and y > 1]
    return sorted(answer)