programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
Solution
import itertools
def solution(orders, course):
result = []
for i in course:
menu = {}
for order in orders:
order = sorted(list(order))
comb_order = list(itertools.combinations(order, i))
for c in comb_order:
if menu.get(c) == None:
menu[c] = 1
else:
menu[c] += 1
menus = sorted(menu.items(), key = lambda x:x[1], reverse=True)
if menus:
maxCnt = menus[0][1]
for menu in menus:
if menu[1] < maxCnt:
break
if menu[1] == maxCnt and maxCnt >= 2:
result.append(list(menu[0]))
for i in range(len(result)):
result[i] = ''.join(result[i])
result_set = set(result)
return sorted(list(result_set))
코스에 들어가는 요리 개수에 맞게 orders를 검사한다. order를 하나씩 보는데 요리들이 주문된 조합들을 얻기 위해 combinations를 사용했다. 그리고 그 조합들을 menu에 담아준 후 value(주문된 횟수)를 기준으로 정렬하여 menus에 담는다. menus는 다음과 같이 나올 것이다.
[(('A', 'C'), 4), (('C', 'D'), 3), (('C', 'E'), 3), (('D', 'E'), 3), (('B', 'C'), 2), (('B', 'F'), 2), (('B', 'G'), 2), (('C', 'F'), 2), (('C', 'G'), 2), (('F', 'G'), 2), (('A', 'D'), 2), (('A', 'E'), 2), (('A', 'B'), 1), (('A', 'F'), 1), (('A', 'G'), 1), (('A', 'H'), 1), (('C', 'H'), 1), (('D', 'H'), 1), (('E', 'H'), 1)]
[(('C', 'D', 'E'), 3), (('B', 'C', 'F'), 2), (('B', 'C', 'G'), 2), (('B', 'F', 'G'), 2), (('C', 'F', 'G'), 2), (('A', 'C', 'D'), 2), (('A', 'C', 'E'), 2), (('A', 'D', 'E'), 2), (('A', 'B', 'C'), 1), (('A', 'B', 'F'), 1), (('A', 'B', 'G'), 1), (('A', 'C', 'F'), 1), (('A', 'C', 'G'), 1), (('A', 'F', 'G'), 1), (('A', 'C', 'H'), 1), (('A', 'D', 'H'), 1), (('A', 'E', 'H'), 1), (('C', 'D', 'H'), 1), (('C', 'E', 'H'), 1), (('D', 'E', 'H'), 1)]
[(('B', 'C', 'F', 'G'), 2), (('A', 'C', 'D', 'E'), 2), (('A', 'B', 'C', 'F'), 1), (('A', 'B', 'C', 'G'), 1), (('A', 'B', 'F', 'G'), 1), (('A', 'C', 'F', 'G'), 1), (('A', 'C', 'D', 'H'), 1), (('A', 'C', 'E', 'H'), 1), (('A', 'D', 'E', 'H'), 1), (('C', 'D', 'E', 'H'), 1)]
첫 번째 원소가 가장 많이 주문된 요리 조합이므로, maxCnt에 첫 번째 원소의 주문 횟수를 담아주고 다른 원소들을 검사하며 주문 횟수가 적어지면 바로 for문을 탈출한다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 합승 택시 요금 / Python / 2021 KAKAO BLIND RECRUITMENT (0) | 2021.03.09 |
---|---|
[프로그래머스] 순위 검색 / Python / 2021 KAKAO BLIND RECRUITMENT (0) | 2021.03.09 |
[프로그래머스] 신규 아이디 추천 / Python / 2021 KAKAO BLIND RECRUITMENT (0) | 2021.03.09 |
[프로그래머스] 가사 검색 / Python / 2020 KAKAO BLIND RECRUITMENT (0) | 2020.10.04 |
[프로그래머스] 경주로 건설 / Python / 2020 카카오 인턴십 (0) | 2020.08.31 |
,