본문 바로가기

알고리즘/프로그래머스

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

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

 

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

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

programmers.co.kr

풀이 과정

  • itertools의 combinations를 이용한다. (가능한 조합을 모두 찾아준다.)
  • collections의 Counter를 이용한다. (리스트의 각 원소의 개수를 key-value 형태로 저장한다.)
  • 각 coures에 대해 반복문을 시행하면서 각 orders에서 combination으로 coures에 있는 개수로 조합을 모두 찾는다.
  • 각 coures에 대해 찾은 조합을 모두 저장한 리스트를 Counter로 각각의 개수와 함께 저장한다.
  • 저장된 counter로 2개 이상인 것들 중 가장 많이 주문한 코스를 answer에 저장한다. 

전체 코드

# 메뉴 리뉴얼
from itertools import combinations
from collections import Counter

def solution(orders, course):
    answer = []
    for i in course:
        temp = []
        for j in orders:
            temp.extend(list(combinations(sorted(j), i)))
        counter = Counter(temp)
        if not counter: continue
        m = max(counter.values())
        if m < 2: continue
        for i in counter.keys():
            if counter[i] == m:
                answer.append(''.join(i))
    answer.sort()
    return answer
반응형