/ ALGORITHM

(프로그래머스 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가지 정도만 주의하면 그래도 풀만(?) 한 문제였다 (난 정답을 보고 힌트를 얻었다..^^)