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

Jaewoong2·2021년 2월 5일
1

알고리즘공부

목록 보기
18/35

문제 설명

문제


접근 방법

orders 에 있는 메뉴들 중에서 course개 만큼 뽑아서, 뽑은 것들 중 가장 많은 것 들을 모아서 return 하면 된다.

  1. 조합 을 이용하여 course 배열 안에 있는 원소들의 값 만큼 orders 에서 뽑는다.

  2. course 배열 안에 있는 원소들을 조합을 이용하여 뽑은 모든 경우의 수를 배열안에 넣고, 각각의 경우가 총 몇번 뽑는지 갯수를 샌다.

  3. 1개 이상, 가장 많이 뽑힌 갯수 만큼 뽑힌 것들을 모두 return 한다.

(예로, 3번 주문된 'AC', 'CD', 'EF' 가 있으면, 'AC', 'CD', 'EF' 모두 return 한다.)

코드

    def solution_itertools(orders, course):
        import itertools

        answer = []

        for size_of_course in course:
            order_dict = {}
            order_combinations = []
            for order in orders:
                order_combinations.extend(list(itertools.combinations(sorted(order), size_of_course)))

            for order_combination in order_combinations:
                order_str = ''.join(order_combination)
                if order_str in order_dict:
                    order_dict[order_str] += 1
                else:
                    order_dict[order_str] = 1

            for order in order_dict:
                if order_dict[order] == max([order_dict[order] for order in order_dict]):
                    if order_dict[order] > 1:
                        answer.append(order)


        return sorted(answer) # 오름차순으로 반환해야 하기 때문에, sorted로 정렬 해준다.
        
profile
DFF (Development For Fun)

2개의 댓글

comment-user-thumbnail
2021년 5월 19일

좋은 풀이 잘 보고 갑니다.

1개의 답글