Lv2 - 메뉴 리뉴얼

LeeKyoungChang·2022년 4월 24일
0

Algorithm

목록 보기
176/203
post-thumbnail

📚 Lv2 - 메뉴 리뉴얼

메뉴 리뉴얼

 

라이브러리를 잘 활용한 코드 참고하였습니다.
참고

 

이해

course의 숫자만큼 반복 (2, 3, 5의 경우)

2개짜리 조합, 3개짜리 조합, 5개짜리 조합

(1) 모든 order에 대한 반복

  • order에 대해 course 값 (2개, 3개, 5개) 만큼 조합
  • ex) order : A, B, C, F, G course : 2 의 경우 → AB, AC, AF, AG, BC, BF ~
  • XY, YX의 경우를 위해 미리 정렬해준 뒤 조합한다.

(2) 조합된 주문에 대해 모든 주문 내역에 해당 조합의 갯수를 counter 모듈을 통해 구한다.

(3) 해당 counter에 아무 값도 없거나, 최댓값이 1이면 패스한다.

(4) 아니면 answer에 최댓값을 가진 주문 조합을 넣는다. ("스카피"는 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다.)

 

소스

from itertools import combinations
from collections import Counter


def solution(orders, course):
    answer = []
    for c in course:
        temp = []
        for order in orders:
            combi = combinations(sorted(order), c)
            temp += combi
        counter = Counter(temp)

        # 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합
        if len(counter) != 0 and max(counter.values()) != 1:
            answer += [''.join(f) for f in counter if counter[f] == max(counter.values())]

    return sorted(answer)

print(solution(["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"],[2,3,4]))
스크린샷 2022-04-24 오후 1 58 15
profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글