코딩테스트/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)