보물창고 블로그

프로그래머스 메뉴 리뉴얼 풀이 With Python 본문

알고리즘 풀이/프로그래머스

프로그래머스 메뉴 리뉴얼 풀이 With Python

홋 메 2022. 2. 23. 22:31
728x90

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/72411

 

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

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

programmers.co.kr

문제의 핵심은 조합의 사용에 있습니다. 각 course 마다 손님이 먹을 수 있는 경우가 가장 많은 것을 answer에 넣어야 합니다. 소스코드는 아래와 같습니다. 

def solution(orders, course):
    answer = []
    from itertools import combinations
    from collections import defaultdict

    for c in course:
        coursedict = defaultdict(int)
        for order in orders:
            if len(order) >= c:
                t = sorted(list(order))
                for com in combinations(t,c):
                    coursedict[''.join(com)]+=1
        coursedict =sorted(coursedict.items(),key= lambda x: x[1],reverse=True)
        if coursedict:
            maxi = coursedict[0][1]
            if maxi>1:
                for candidate in coursedict:
                    if candidate[1]==maxi:
                        answer.append(candidate[0])
                    else:
                        break
    answer.sort()
    return answer

for문으로 각 course마다 손님이 course만큼의 음식을 선택할 수 있는 조합을 coursedict에 key 값으로 담아서 가장 높은 빈도수를 maxi 변수에 담고, 빈도수가 maxi인 경우 answer에 추가하고 마지막에 sort를 사용하여 알파벳 순서로 정렬해줍니다. collections 모듈의 Counter 객체를 사용하여 좀 더 쉽게 풀 수도 있습니다.

 

Comments