orders 에 있는 메뉴들 중에서 course개 만큼 뽑아서, 뽑은 것들 중 가장 많은 것 들을 모아서 return 하면 된다.
조합
을 이용하여 course 배열
안에 있는 원소들의 값 만큼 orders
에서 뽑는다.
course 배열
안에 있는 원소들을 조합
을 이용하여 뽑은 모든 경우의 수를 배열안에 넣고, 각각의 경우가 총 몇번 뽑는지 갯수를 샌다.
1개 이상, 가장 많이 뽑힌 갯수
만큼 뽑힌 것들을 모두 return 한다.
(예로, 3번 주문된 'AC', 'CD', 'EF' 가 있으면, 'AC', 'CD', 'EF' 모두 return 한다.)
def solution_itertools(orders, course):
import itertools
answer = []
for size_of_course in course:
order_dict = {}
order_combinations = []
for order in orders:
order_combinations.extend(list(itertools.combinations(sorted(order), size_of_course)))
for order_combination in order_combinations:
order_str = ''.join(order_combination)
if order_str in order_dict:
order_dict[order_str] += 1
else:
order_dict[order_str] = 1
for order in order_dict:
if order_dict[order] == max([order_dict[order] for order in order_dict]):
if order_dict[order] > 1:
answer.append(order)
return sorted(answer) # 오름차순으로 반환해야 하기 때문에, sorted로 정렬 해준다.
좋은 풀이 잘 보고 갑니다.