문제는 아래와 같습니다.

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

 

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

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

programmers.co.kr

 

풀이

 

def solution(orders, course):
    
    from itertools import combinations 
    from collections import Counter

    total=[]
    result=[]
    value_1=[]
    
    for j in course:
    
        total=[]
        value_1=[]
        
        for i in orders:
            total+=list(combinations(i, j))
    
        for idx, value in enumerate(total):
            value_1.append(''.join(sorted(list(value))))
        
        for common in Counter(value_1).most_common():
            if common[1]==Counter(value_1).most_common()[0][1] & Counter(value_1).most_common()[0][1]>1:
                result.append(common[0])
    
    return sorted(list(set(result)))

 

1단계: itertools.combinations 함수로 음식 조합을 구성합니다.

 

2단계: 1단계의 결과가 튜플 형식으로 나옵니다. 그리고 ('A', 'B'), ('C', 'D') 형식이기 때문에 'AB', 'CD'로 변환합니다.

 

3단계: 두 명 이상이 주문한 음식 조합을 선택해야 됩니다. 또한 만약에 같은 개수의 음식 조합이 존재한다면, 주문한 수가 가장 많은 음식 조합을 선택해야 합니다. 예를 들면, 네오와 어피치가 'ABC' 음식 조합을 먹었고 네오, 어피치, 프로도가 'ACE' 음식 조합을 먹었다면 'ACE'를 선택해야 합니다. 주문한 수가 더 많았기 때문입니다. 

따라서 collections.Counter 함수를 이용해서 2번 이상 주문하고 가장 많이 주문한 조합 위주로 선택해야 합니다.

 

4단계: set 함수를 이용해 중복된 결과를 제거하고 list 변환한 후 sorted 함수로 알파벳순 정렬합니다. 

 

 

 

 

 

 

 

+ Recent posts