from itertools import combinations
from collections import defaultdict
def solution(orders, course):
answer = []
order_info = defaultdict(int)
for order in orders:
order = ''.join(sorted(list(order)))
for course_size in course:
if len(order) >= course_size:
temp = list(combinations(order, course_size))
for j in temp:
order_info[''.join(j)] += 1
order_info = dict(sorted(order_info.items(), key=lambda x: -x[1]))
for i in course:
max_value = -1e9
max_temp = []
for key in order_info.keys():
if len(key) == i and order_info[key] >= 2:
if order_info[key] > max_value:
max_temp = [key]
max_value = order_info[key]
elif order_info[key] == max_value:
max_temp.append(key)
for i in max_temp:
answer.append(i)
answer.sort()
return answer
Counter 라이브러리를 활용한 좀 더 깔끔한 코드를 보고 다시 한번 작성했다.
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for course_size in course:
order_combinations = []
for order in orders:
order_combinations += combinations(sorted(order), course_size)
most_ordered = Counter(order_combinations).most_common()
if len(most_ordered) == 0:
continue
max_value = most_ordered[0][1]
for key, value in most_ordered:
if value > 1 and value == max_value:
answer.append(''.join(key))
return sorted(answer)
소요 시간은 얼추 비슷비슷? 하다.
https://docs.python.org/ko/3/library/collections.html#collections.Counter