문제 설명 및 제한사항
아이디어 및 해결 방법
코드
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