기록

프로그래머스_python_메뉴 리뉴얼 본문

코딩테스트/python

프로그래머스_python_메뉴 리뉴얼

youngyin 2022. 2. 9. 10:08

문제

https://programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

풀이

1. 조건에 맞는 메뉴 조합 만들기

2. 메뉴 조합별 빈도 세기

코드

from itertools import combinations
from collections import defaultdict

def solution(orders, course):
    answer = list()
    
    for count in course : 
        menu_items = list()
        
        # 메뉴 구성 만들기
        for food in orders : 
            if len(food)>=count : 
                combination_item = combinations(food, count)
                menu_string = ["".join(sorted(it)) for it in combination_item]
                menu_items.extend(menu_string)
        
        # 빈도 세기
        freqDict = defaultdict(set)
        max_freq = 1
        for item in set(menu_items) : 
            item_count = menu_items.count(item)
            freqDict[item_count].add(item)
            max_freq = max(max_freq, item_count)
        
        # 최소 2명 이상의 손님에게서 주문된 구성만 코스요리 후보에 들어감
        if max_freq>=2 : answer.extend(freqDict[max_freq])
        
    return sorted(answer)
Comments