라이브러리를 잘 활용한 코드 참고하였습니다.
참고
course
의 숫자만큼 반복 (2, 3, 5의 경우)
2개짜리 조합, 3개짜리 조합, 5개짜리 조합
(1) 모든 order에 대한 반복
order
에 대해 course
값 (2개, 3개, 5개) 만큼 조합order
: A, B, C, F, G course
: 2 의 경우 → AB, AC, AF, AG, BC, BF ~XY, YX
의 경우를 위해 미리 정렬해준 뒤 조합한다.(2) 조합된 주문에 대해 모든 주문 내역에 해당 조합의 갯수를 counter
모듈을 통해 구한다.
(3) 해당 counter
에 아무 값도 없거나, 최댓값이 1이면 패스한다.
(4) 아니면 answer
에 최댓값을 가진 주문 조합을 넣는다. ("스카피"는 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다.)
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for c in course:
temp = []
for order in orders:
combi = combinations(sorted(order), c)
temp += combi
counter = Counter(temp)
# 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합
if len(counter) != 0 and max(counter.values()) != 1:
answer += [''.join(f) for f in counter if counter[f] == max(counter.values())]
return sorted(answer)
print(solution(["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"],[2,3,4]))