카테고리 없음
[코드 리뷰] counter, itertools (메뉴 리뉴얼)
재키재키
2022. 1. 15. 19:06
문제)
각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders, "스카피"가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course가 매개변수로 주어질 때, "스카피"가 새로 추가하게 될 코스요리의 메뉴 구성을 문자열 형태로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
풀이)
from collections import Counter
from itertools import combinations # 각 모듈에서 필요한 객체들만 import
def solution(orders, course):
answer = []
for course in course:
entry = Counter({})
# 각 주문에서 구성할 수 있는 course요리들을 combinations로 세고,
# Counter 객체로 만들어 빈도수를 세어서 entry에 담는다.
for order in orders:
order = sorted(list(order)) # 조합인데 뽑는 순서에 따라 다르게 카운트한다.. (X,Y) != (Y,X) 그냥 여기서 sort를 해줘버리자.
entry += Counter(combinations(order,course))
# 매번 구성된 entry 중 가장 빈도수 높은 값을 answer에 추가.
for key, value in entry.items(): # Counter 객체역시 dict이므로 다루는 방법이 똑같다.
if value == entry.most_common(1)[0][1] and value >= 2:
answer.append(''.join(key))
answer.sort() # 알파벳순으로 오름차순 정리
return answer