2021 KAKAO BLIND RECRUITMENT
문제풀러 바로가기👇👇👇👇👇👇
https://programmers.co.kr/learn/courses/30/lessons/72411
문제 설명
위 문제는 단순 구현 문제로 조합(itertools.combinations)을 사용해 모든 메뉴의 경우 구한다. 그리고 collections.Counter 라이브러리를 이용해 가장 주문이 많았던 조합을 구해 코스요리에 추가하면 된다. 논리는 간단하다.
이 문제의 주의사항은 값이 주어질 때, 무조건 알파벳 순서대로 주지 않기 때문에 각 코스에 정렬을 진행한 다음에 메뉴의 개수를 세는 작업을 착수해야 정답을 얻을 수 있다.
코드
- 내 풀이
def solution(orders, course):
from itertools import combinations
from collections import Counter
course_dict = []
for c in course:
menu = []
for o in orders:
for i in list(combinations(o, c)):
menu.append("".join(sorted(list(i))))
course_dict.append(Counter(menu))
answer = []
for dict in course_dict:
tmp = 2
for key, value in dict.most_common():
if value >= tmp:
tmp = value
answer.append(key)
else:
break
answer.sort()
return answer
- 다른 사람 풀이
import collections
import itertools
def solution(orders, course):
result = []
for course_size in course:
order_combinations = []
for order in orders:
order_combinations += itertools.combinations(sorted(order), course_size)
most_ordered = collections.Counter(order_combinations).most_common()
result += [ k for k, v in most_ordered if v > 1 and v == most_ordered[0][1] ]
return [ ''.join(v) for v in sorted(result) ]
다른 사람의 풀이와 비교해봤을 때, 전체적인 논리는 비슷하지만 내 풀이에 비해
- 간결하다.
- 마지막에 문자열화를 진행한다.
- 처음 combinations 함수에 넣을 때 정렬이 진행시킨다.
는 점에서 달랐다.