[Programmers][Python]메뉴 리뉴얼
https://programmers.co.kr/learn/courses/30/lessons/72411
📌풀이
내가 쓴 풀이(성공)
defaultdict
를 활용해 각course
의 원소마다 딕셔너리를 생성- 각
course
의 원소 기준, 각orders
의 원소들을combinations
를 통해 조합을 생성하고, 문자열로 치환하여 딕셔너리의 key로 활용 - 딕셔너리가 비어있거나, value의 최대값이 1인 경우, 메뉴를 구성할 수 없으므로 skip
- 딕셔너리의 value의 최대값을 확인하고, 일치하는 모든 경우를 결과 리스트
answer
에 추가 sort
를 활용해 오름 차순 정렬
from itertools import combinations
from collections import defaultdict
def solution(orders, course):
answer = []
for c in course:
# 각 요리의 개수에 따른 딕셔너리 생성
dic = defaultdict(int)
for order in orders:
# order 안에서 생성될 수 있는 요리 조합을 다 저장
for case in combinations(order, c):
case = ''.join(sorted(list(case)))
dic[case] += 1
# 딕셔너리가 비어있거나, 최대값이 1인 경우는 넘김
if not dic or max(dic.values()) == 1 :
continue
# 최대값과 일치하는 모든 경우를 결과에 저장
cnt = max(dic.values())
for key, value in dic.items():
if value == cnt :
answer.append(key)
# 알파벳 오름차순 정렬
answer.sort()
return answer
📌후기
과거에 작성했던 풀이를 나중에 봤는데, 다시 보니 하나도 이해가 되지 않는 풀이였다. 앞으로 코드를 짤 때는 조금 더 가독성 있게 구현하고, 주석은 필수라는 생각이 강렬하게 들었다!
다른 사람들의 풀이를 보던 중, Counter
를 활용해서 문제를 푼 경우들이 다수 존재했다. Counter
는 어떻게 활용할 수 있는지 한번 찾아봐야겠다!
Author And Source
이 문제에 관하여([Programmers][Python]메뉴 리뉴얼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mein-figur/ProgrammersPython메뉴-리뉴얼저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)