(프로그래머스 with python) 메뉴 리뉴얼
Level2 - 메뉴 리뉴얼
https://programmers.co.kr/learn/courses/30/lessons/72411
생각해야 할 부분
1. 메뉴는 course의 개수만큼 조합된다. 이때 WK, KW와 같이 문자의 순서가 바뀐 것도 같다고 처리해야 한다 (sort이용)
2. 최소 2명의 손님이 세트메뉴의 조합을 가지고 있어야 한다. 즉 세트메뉴에 대해 max값이 1이여도 해당 값을 가진 메뉴는 리턴 될 수 없다
from itertools import combinations
def solution(orders, course):
ord_dict = {}
result = []
for k in course:
cnd = []
ord_dict = {}
m = 0
for menu in orders:
menu_li = list(''.join(menu))
for li in combinations(menu_li, k):
n_li = ''.join(sorted(li))
if n_li not in cnd:
cnd.append(n_li)
else:
if n_li not in ord_dict.keys():
ord_dict[n_li] = 2
else:
ord_dict[n_li] += 1
for i,v in ord_dict.items():
m = max(m, v)
result += [''.join(i) for i,v in ord_dict.items() if m == v]
return sorted(set(result))
solution(["ABCDE", "AB", "CD", "ADE", "XYZ", "XYZ", "ACD"], [2, 3, 5])
2가지 정도만 주의하면 그래도 풀만(?) 한 문제였다 (난 정답을 보고 힌트를 얻었다..^^)