프로그래머스 메뉴 리뉴얼 코드 및 해설 (파이썬)
2021. 6. 1. 15:26ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/72411
combinations를 사용해 모든 메뉴 조합을 구하고, 이를 combs에 저장합니다. 이후 이 combs를 메뉴 개수가 많은 순대로 정렬하고, 개수가 같다면 빈도 수가 높은 순대로 정렬합니다. 각 길이 별로 가장 빈도수가 높은 메뉴 조합을 answer에 append하고, 최종적으로 answer를 알파벳 순으로 정렬한 후 반환합니다.
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
combs = []
for order in orders:
for c in course:
# (A,B)와 (B,A)가 따로 만들어지지 않도록 order를 알파벳 정렬
order = list(order)
order.sort()
combs += list(combinations(order, c))
# 길이 긴 순으로 정렬, 같은 길이라면 빈도가 높은 순대로 정렬
combs = sorted(Counter(combs).items(), reverse=True, key=lambda x: (len(x[0]), x[1]))
prev_len = 0
max_count = 0
for comb in combs:
menu, count = comb
# 주문 횟수가 2보다 작은 경우, 각 길이의 가장 많이 함께 주문된 메뉴 구성이 아닌 경우
if count < 2 or (count < max_count and len(menu) == prev_len):
continue
answer.append(''.join(menu))
max_count = count
prev_len = len(menu)
# 최종 답을 알파벳 순으로 정렬
answer.sort()
return answer
반응형
'algorithm' 카테고리의 다른 글
프로그래머스 등굣길 코드 및 해설 (파이썬) (0) | 2021.06.01 |
---|---|
프로그래머스 N-QUEEN 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 타겟 넘버 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 여행경로 코드 및 해설 (파이썬) (0) | 2021.04.29 |
프로그래머스 베스트앨범 코드 및 해설 (파이썬) (0) | 2021.04.27 |