스터디/알고리즘

메뉴 리뉴얼

세졍 2024. 5. 28. 15:30

문제이해
orders배열에 각테이블이 시킨 2개이상의 음식들이 문자열형태로 나오고 
course에 몇가지 음식으로 만들것인지 배열이 나옴2~10 이하의 수로
2가지가 가장 많이 나온 조합 ,3가지가 가많이 나온조합 ...여러개면 여러개모두
result 출력

 

1. course 에 있는 수만큼 조합을 만들어서 가장 많이 나온 조합 찾기( combinations) 내장함수 사용

from itertools import combinations

menu = "abcd"
for i in combinations(menu,2):
    print(i)
    
# 
('a', 'b')
('a', 'c')
('a', 'd')
('b', 'c')
('b', 'd')
('c', 'd')

 

from itertools import combinations
def solution(orders, course):
    answer = []
    for i in course:
        arr = {}
        for j in orders:
            for aa in combinations(sorted(j),i):
                if ''.join(aa) in arr:
                    arr[(''.join(aa))] += 1
                else:
                    arr[(''.join(aa))] = 1
        # 최대 조합찾기

        max_v = 0
        for k in arr.items():
            if k[1] > max_v:
                max_v = k[1]
        if max_v == 1:
            break
        for k in arr.items():
            if k[1] == max_v:
                answer.append(k[0])
    answer = sorted(answer)
    return answer




orders = ["ABCDE", "AB", "CD", "ADE", "XYZ", "XYZ", "ACD"]
course = [2,3,5]
print(solution(orders,course))

 

  • 조합이 최대 손님 1명이상의 주문이있어야 하므로 {'조합~~':1} 이런식으로 

여기서 max_v가 1이라면 break 하는거 중요

 

 

  • 조합에서 순서 중요함 ac,ca반복해서 나오지 않도록

sorted 해주기

for aa in combinations(sorted(j),i)