DevKim

[Python] 2021 카카오 BLIND RECRUITMENT - 메뉴 리뉴얼 본문

알고리즘 PS

[Python] 2021 카카오 BLIND RECRUITMENT - 메뉴 리뉴얼

on_doing 2021. 2. 20. 15:20
728x90

programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

[ 알고리즘 ]

구현

 

[문제 접근]

1. combonations 를 이용해 조합을 구해주었고

2. Counter을 이용해 나온 횟수를 구해주었다.

 

처음엔 collections 에 있는 defaultdict을 이용해서 문자열들의 조합을 하나씩 세주고, 

그 후 정렬을 한 후에 최대값과 같은 애들을 하나씩 구해줬는데 그렇게하니

실행 케이스에서 2개 정도 시간 초과가 나서

아예 처음부터 리스트에 정렬해서 몽땅 저장한 후에 Counter을 이용하여 갯수를 세어줌

 

[코드]

from itertools import combinations
from collections import Counter

def solution(orders, course):  
    answer = []
    food=[]
    bag=[] # 임시 보관
    Max=0
    
    # 조합 구하기
    for num in course:
        List=[]        
        for order in orders:
            for com in combinations(order,num):
                List.append(''.join(sorted(com)))
                
        # 개수 세고 개수 많은 것 차례로 정렬
        counter=Counter(List).most_common()
        
        if len(counter)!=0:       
            Max=counter[0][1]

            for count in counter:
                if Max==count[1] and count[1]>=2:
                    answer.append(count[0])
                else:
                    break
                    
        else:
            continue
    answer.sort()
    return answer
728x90
Comments