본문 바로가기
알고리즘/프로그래머스

[Python] 메뉴 리뉴얼

by 컴공맨 2021. 3. 15.
 

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

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

programmers.co.kr


풀이

각 order별 길이가 cnt인 만들 수 있는 조합을 전부 만들고 가장 많이 만들어진 조합을 구해 해결했습니다.

이때, 조합이 만들어진 최대 개수가 1이라면 문제의 조건에따라 제외해야합니다.

orders의 안에있는 메뉴들의 순서를 알파벳으로 정렬해야 해결이 됬습니다.


코드

from itertools import combinations


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

    # orders 리스트 안의 내용들을 각각 알파벳 순서대로 정렬
    orders = [''.join(sorted(order)) for order in orders]

    all_candidate_course_list = dict()
    for cnt in course:
        for order in orders:
            if cnt > len(order):
                continue

            candidate_course_list = list(map(''.join, combinations(order, cnt)))

            for candidate_course in candidate_course_list:
                if candidate_course in all_candidate_course_list:
                    all_candidate_course_list[candidate_course] += 1
                else:
                    all_candidate_course_list[candidate_course] = 1

        max_cnt = max(all_candidate_course_list.values())

        if max_cnt == 1:
            continue

        for candidate_course in all_candidate_course_list:
            if all_candidate_course_list[candidate_course] == max_cnt:
                answer.append(candidate_course)

        all_candidate_course_list.clear()

    return sorted(answer)

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 순위 검색  (0) 2021.03.21
[Python] 괄호 변환  (0) 2021.03.21
[Python] 문자열 압축  (0) 2021.03.14
[Python] 다트 게임  (0) 2021.03.07
[Python] 실패율  (0) 2021.03.06