https://programmers.co.kr/learn/courses/30/lessons/72411
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for i in course:
freq = []
for order in orders:
for tmp in combinations(order, i):
freq.append(''.join(sorted(tmp)))
mostcnt = Counter(freq).most_common()
answer += [menu for menu, cnt in mostcnt if cnt > 1 and cnt == mostcnt[0][1]]
return sorted(answer)
못풀겠어서 검색을 했다.
처음 문제를 보고
그냥 전체 주문 중에서 가장 많이 등장한 알파벳을 course리스트의 요소만큼 리스트에 담아내는 건줄 알았는데,
코스요리로 함께 내야하므로 각 손님이 주문한 요리의 조합 중에서 가장 많이 등장한 조합을 뽑아야한다.
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for i in course:
freq = []
for order in orders:
for tmp in combinations(order, i): # order에서 i개 만큼 순서없이 튜플형태로 뽑아내기 ('A','B','C'...)
freq.append(''.join(sorted(tmp))) # sorted()로 tmp를 정렬된 리스트로 리턴받고 join으로 문자열로 만들어줌
mostcnt = Counter(freq).most_common()
# Counter()을 통해 요리 조합이 몇번 등장하는지 알 수 있음
# .most_common() 메소드로 최빈조합부터 순서대로 정렬된 리스트를 받을 수 있음
answer += [menu for menu, cnt in mostcnt if cnt > 1 and cnt == mostcnt[0][1]]
# 요리조합이 두번 이상 등장하고, 최빈조합이라면 answer 리스트에 더해줌
return sorted(answer) # 사전순 정렬
요리의 조합이 같아야한다고 까지는 이해했지만
각 손님들과 비교를 위해서 콤비네이션을 써야겠다는 생각을 못했다.
나중에 다시 풀어봐야할듯