algorithm/프로그래머스 문제

[프로그래머스LV2]메뉴 리뉴얼

장경훈 2022. 7. 15. 12:00
  [LV2] 메뉴 리뉴얼 문제링크
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 
www.programmers.co.kr

 

문제해설

 

이번 문제는 각각의 주문들의 조합을 combinations 함수를 사용하여 구한뒤 Counter 를 사용하여 각각의 중복된 조합의 개수를 딕셔너리 형태로 저장하여 코스 구성에 필요한 메뉴수에 따라서 최대한의 수요를 파악한 후 이를 출력하면 되는 문제이다.

from itertools import combinations 
from collections import Counter

def solution(orders, course):
    answer = []
    for c in course: 
        comb=[]
        for order in orders: #각각의 주문의 조합을 리스트에 저장
            tmp=list(combinations(sorted(order),c))
            comb+=tmp
        cnt=Counter(comb)#각각의 조합의 중복된 횟수를 딕셔너리 형태로 저장
        if len(cnt) != 0 and max(cnt.values()) != 1: #메뉴의수가 0개거나 최대 중복횟수가 1인 경우 스킵
            for alpha in cnt: #메뉴조합이 최대횟수로 반복되면 answer에 삽입
                if cnt[alpha]== max(cnt.values()):
                    answer+=[''.join(alpha)]
    
    return sorted(answer)

 

Feedback

 

  • 조합하는 것까지는 생각했지만 그 이후에 Counter을 사용하는것은 구글링을 통해서 알게 되었다. 차후에 다시 한번 문제를 풀어봐야 한다.
  • 마지막에 join하는것에 있어서 개념이 부족했다 join의 여러가지 활용들을 확인해봐야 할 것 같다.