https://programmers.co.kr/learn/courses/30/lessons/72411
defaultdict
를 활용해 각 course
의 원소마다 딕셔너리를 생성course
의 원소 기준, 각 orders
의 원소들을 combinations
를 통해 조합을 생성하고, 문자열로 치환하여 딕셔너리의 key로 활용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
는 어떻게 활용할 수 있는지 한번 찾아봐야겠다!