스터디/알고리즘
메뉴 리뉴얼
세졍
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)