[카카오 2021] 메뉴 리뉴얼

kiwonkim·2021년 6월 15일
0

문제분석

각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders, "스카피"가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course가 매개변수로 주어질 때, "스카피"가 새로 추가하게 될 코스요리의 메뉴 구성을 문자열 형태로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.

orders : ["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"]
course : [2,3,4]
result : ["AC", "ACDE", "BCFG", "CDE"]

즉 함께 가장 많이 조합된 메뉴를 결과에 삽입하는데, course에 있는 수 만큼 조합된 메뉴를 삽입한다.
예시의 경우 2개, 3개, 4개의 조합된 메뉴중 가장 많이 함께한 메뉴들.

아이디어

모든 course 원소 수 만큼의 조합을 orders를 돌면서 저장하고.
Counter를 활용해 가장 많이 사용된 조합을 course 원소 수 별로 확인한다.

코드

from itertools import combinations
from collections import Counter

def solution(orders, course):
    answer = []
    for c in course:
        temp = []
        for o in orders:
            for l in combinations(o, c):
                l = ''.join(sorted(l))
                temp.append(l)
        count = Counter(temp).most_common()
        length = len(count)
        for i in range(length):
            if count[i][1] < count[0][1]: break
            if count[i][1] > 1: answer.append(count[i][0])
    answer.sort()
    return answer

코드분석

course에 있는 숫자만큼 모든 order 메뉴를 조합한다. combinations 사용.
combinations의 조합한 모든 메뉴를 리스트에 넣는다. 이때 "AW"와 "WA"는 같은 조합이므로 투플 원소를 정렬하여 삽입하는 것에 유의.
리스트를 Counter.most_common 을 통해 ("원소", 횟수) 의 리스트로 변환한다.
Counter를 순회하며 횟수가 2 이상이고 최대횟수와 같다면 result에 삽입한다.
최종적으로 answer을 정렬하여 반환한다.

0개의 댓글

관련 채용 정보