문제는 아래와 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/72411
풀이
def solution(orders, course):
from itertools import combinations
from collections import Counter
total=[]
result=[]
value_1=[]
for j in course:
total=[]
value_1=[]
for i in orders:
total+=list(combinations(i, j))
for idx, value in enumerate(total):
value_1.append(''.join(sorted(list(value))))
for common in Counter(value_1).most_common():
if common[1]==Counter(value_1).most_common()[0][1] & Counter(value_1).most_common()[0][1]>1:
result.append(common[0])
return sorted(list(set(result)))
1단계: itertools.combinations 함수로 음식 조합을 구성합니다.
2단계: 1단계의 결과가 튜플 형식으로 나옵니다. 그리고 ('A', 'B'), ('C', 'D') 형식이기 때문에 'AB', 'CD'로 변환합니다.
3단계: 두 명 이상이 주문한 음식 조합을 선택해야 됩니다. 또한 만약에 같은 개수의 음식 조합이 존재한다면, 주문한 수가 가장 많은 음식 조합을 선택해야 합니다. 예를 들면, 네오와 어피치가 'ABC' 음식 조합을 먹었고 네오, 어피치, 프로도가 'ACE' 음식 조합을 먹었다면 'ACE'를 선택해야 합니다. 주문한 수가 더 많았기 때문입니다.
따라서 collections.Counter 함수를 이용해서 2번 이상 주문하고 가장 많이 주문한 조합 위주로 선택해야 합니다.
4단계: set 함수를 이용해 중복된 결과를 제거하고 list 변환한 후 sorted 함수로 알파벳순 정렬합니다.
'Python' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어-I am yumida (0) | 2021.12.12 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위-I am yumida (0) | 2021.12.12 |
[프로그래머스] 신규 아이디 추천-I am yumida (0) | 2021.12.04 |
리트코드 #23. Merge k Sorted Lists 풀이 - I am yumida (1) | 2021.08.26 |
(자료구조) 연결 리스트를 알아봅시다. - I am yumida (0) | 2021.08.26 |