본문 바로가기
코딩 테스트

[프로그래머스] 메뉴 리뉴얼 (Python)

by zoodi 2021. 3. 18.
728x90

🍒문제

programmers.co.kr/learn/courses/30/lessons/72411?language=python3

 

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

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

programmers.co.kr

 

🍒풀이

1. 먼저 orders 의 문자열을 정렬한다. !!!

2. combination 조합으로 course 수 만큼 조합을 생성한다.

3. 조합의 개수를 dictionary 로 센 다음 2개 이상 주문한 것들 중에서 가장 큰 value를 가진 key(order)를 answer에 추가한다.

 

*** order 안의 스트링도 정렬을 해주어야 한다 ***

 

🍒코드

import itertools

#가장 많이 함께 주문된 단품을 코스로 (여러개면 배열에 모두 담음)
#최소 2개 단품 이상 주문

def solution(orders, course):
    answer = []
    
    for num in course:
        #print(num)
        total = {}
        for order in orders:
            if(num > len(order)):
                continue
            li = list(map(''.join,itertools.combinations(sorted(order), num)))
            for key in li:
                if key not in total:
                    total[key] = 1
                else:
                    total[key] += 1

        res = sorted(total.items(), key=lambda x: x[1], reverse=True)
        if(len(res)>0):
            if(res[0][1] < 2):
                continue
            else:
                max_val = res[0][1]
            
            for i in range(len(res)):
                if(res[i][1] == max_val):
                    answer.append(res[i][0])
                else:
                    break
            else:
                continue
            
    answer.sort()
  
    return answer
728x90

댓글