각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders, "스카피"가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course가 매개변수로 주어질 때, "스카피"가 새로 추가하게 될 코스요리의 메뉴 구성을 문자열 형태로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
orders : ["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"]
course : [2,3,4]
result : ["AC", "ACDE", "BCFG", "CDE"]
즉 함께 가장 많이 조합된 메뉴를 결과에 삽입하는데, course에 있는 수 만큼 조합된 메뉴를 삽입한다.
예시의 경우 2개, 3개, 4개의 조합된 메뉴중 가장 많이 함께한 메뉴들.
모든 course 원소 수 만큼의 조합을 orders를 돌면서 저장하고.
Counter를 활용해 가장 많이 사용된 조합을 course 원소 수 별로 확인한다.
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for c in course:
temp = []
for o in orders:
for l in combinations(o, c):
l = ''.join(sorted(l))
temp.append(l)
count = Counter(temp).most_common()
length = len(count)
for i in range(length):
if count[i][1] < count[0][1]: break
if count[i][1] > 1: answer.append(count[i][0])
answer.sort()
return answer
course에 있는 숫자만큼 모든 order 메뉴를 조합한다. combinations 사용.
combinations의 조합한 모든 메뉴를 리스트에 넣는다. 이때 "AW"와 "WA"는 같은 조합이므로 투플 원소를 정렬하여 삽입하는 것에 유의.
리스트를 Counter.most_common 을 통해 ("원소", 횟수) 의 리스트로 변환한다.
Counter를 순회하며 횟수가 2 이상이고 최대횟수와 같다면 result에 삽입한다.
최종적으로 answer을 정렬하여 반환한다.