Search
Duplicate

메뉴 리뉴얼

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

import itertools from collections import Counter, defaultdict def solution(orders, course): orders = [list(sorted(list(o))) for o in orders] cnt = defaultdict(Counter) # 각 주문 이력에 대해서, # course 내의 메뉴 개수인 모든 조합의 개수를 세어 저장합니다. for order in orders: for n in course: for comb in itertools.combinations(order, n): cnt[n][tuple(comb)] += 1 # 각 n 별로, 가장 많이 함께 주문된 메뉴의 리스트를 저장합니다. # 단, 2번 이하로 주문되었다면 무시합니다. answer = [] for n in course: # 가장 많이 주문된 횟수 comm = cnt[n].most_common() if len(comm) == 0: # n개로 메뉴를 못 만드는 경우 continue mx = cnt[n].most_common()[0][1] if mx == 1: continue # 가장 많이 주문된 메뉴들 answer += [''.join(k) for k in cnt[n].keys() if cnt[n][k] == mx] answer.sort() return answer
Python
복사

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges