Algorithm/Python
[Python] 프로그래머스 - 메뉴 리뉴얼(재귀)
힘팽
2022. 3. 20. 22:01
◈ 오류 정정 및 피드백 환영
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
🔎문제 분석
조합(combination)만 구현하면 풀 수 있는 간단한 문제이다.
def combinations_scratch(l):
if l:
result = combinations_scratch(l[:-1])
return result + [c + [l[-1]] for c in result]
else:
return [[]]
def solution(orders, course):
result = []
for n in course:
menu = []
for order in orders:
menu += [''.join(sorted(x)) for x in combinations_scratch(order) if len(x)==n]
menu_dict = {x: menu.count(x) for x in menu}
if menu_dict:
best_menu = max(menu_dict.values())
result += [k for k, v in menu_dict.items() if v==best_menu& best_menu>1]
return sorted(result)
👀다른 풀이
사실 굳이 구현할 필요는 없다. itertools를 사용하자.
그리고 이번에는 Counter도 사용해서 시간을 더 단축해보자.
from itertools import combinations
from collections import Counter
def solution(orders, course):
result = []
for n in course:
menu = []
for order in orders:
menu += list(map(lambda x: ''.join(x), combinations(sorted(order), n)))
menu_dict = Counter(menu)
if menu_dict:
best_menu = max(menu_dict.values())
result += [k for k, v in menu_dict.items() if v==best_menu& best_menu>1]
return sorted(result)