본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

메뉴 리뉴얼 (코딩테스트, 프로그래머스)

by 령과 2022. 1. 19.

문제

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

 

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

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

programmers.co.kr

 

나의 코드

from itertools import combinations
def solution(orders, course):
    answer = []
    for course_i in course:
        dict={}
        tmp_answer = []
        for order in orders:
            tmp_answer+=list(combinations(order,course_i))
        
        for i in tmp_answer:
            i=list(i) #순서 섞인 것도 동일하게 처리를 위해서 정렬해야 함 test3번 참조
            i.sort()
            tmp="".join(i)
            if tmp in dict.keys():
                dict[tmp]+=1
            else:
                dict[tmp]=1
        if len(dict)!=0:
            max_val= max(dict,key=dict.get)
            for key in dict.keys():
                if dict[max_val]==dict[key] and dict[max_val]>=2:
                    answer.append(key)

    answer.sort()
    return answer

경우의 수, 순열 조합을 알고 있다면 구현하면 된

orders에서 하나씩 불러와 단품메뉴 갯수로 만들 수 있는 조합을 combination을 이용하여 구성,

딕셔너리로 만들 수 있는 조합들을 카운트하고 가장 많이 카운트 한 것을 찾아 모두 answer에 추가한다.

이를 반복하면 완성

count할 때

from collections import Counter

해당 기능도 사용할 수 있을 듯하다.

댓글