Published:
Updated:


Solution

# 조합 개념을 이용하는 거니 한번 내장함수 써보자
# 그럼 자동으로 조합이 저장되니까
from itertools import combinations


def solution(orders, course):
    answer = []

    # 1. 각 order 정렬
    orders = [''.join(sorted(order)) for order in orders]

    # 2. course_len 마다 조합 생성
    for c in course:
        hash_map = {}
        max_count = 0

        # 모든 주문에 대해 c개의 메뉴로 가능한 조합 생성
        for order in orders:
            if len(order) < c:  # 주문한 메뉴 개수보다 코스요리 개수가 더 많으면 불가능한 조합이므로 continue
                continue

            for comb in combinations(order, c):
                comb_str = ''.join(comb)  # 조합을 문자열로 변환
                
                if comb_str in hash_map:
                    hash_map[comb_str] += 1  # 이미 존재하는 조합이면 count를 증가
                else:
                    hash_map[comb_str] = 1  # 존재하지 않는 조합이면 count를 1로 설정

                max_count = max(max_count, hash_map[comb_str])  # 최대 주문 수 업데이트

        # 3. 주문 수가 최대인 조합들을 answer에 추가
        if max_count < 2:  # 최대 주문 수가 2보다 작으면 answer에 추가할 필요가 없음
            continue

        for comb in hash_map:
            if hash_map[comb] == max_count:
                answer.append(comb)

    answer.sort()  # answer를 사전순으로 정렬
    return answer

print(solution(["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"], [2, 3, 4]))

Leave a comment