카테고리 없음

[코드 리뷰] 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