Problem Solving/Programmers

[Programmers] 2021 KAKAO BLIND RECRUITMENT: 메뉴 리뉴얼(Python)

이진2 2021. 6. 8. 03:19

https://programmers.co.kr/learn/courses/30/lessons/72411

 

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

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

programmers.co.kr

from itertools import combinations

def solution(orders, course):
    answer = []
    orderset = []
    for o in orders:
      orderset.append(set(o))
    
    comb=set()
    for o in orders:
      for num in course:
        if num>len(o):break
        li = list(combinations(sorted(list(o)),num))
        for l in li:
          comb.add(l)
    
    can = [[] for _ in range(11)]
    for i in comb:
      cnt = 0
      for o in orderset:
        if len(i) > len(o):continue
        if len(set(i) - o)==0:
          cnt+=1
      s = "".join(sorted(list(i)))
      if cnt>=2:
        can[len(s)].append([s,cnt])
        
    for i in range(len(can)):
      if len(can[i])==0:continue
      can[i].sort(key=lambda x:x[1], reverse=True)
      for c in can[i]:
        if c[1]==can[i][0][1]:answer.append(c[0])
    
    return sorted(answer)