파이썬 알고리즘 : 메뉴 리뉴얼

카카오 코딩테스트

2024년 4월 29일 알고리즘 문제풀이

문제

난이도

Lv. 2

코드

1차시도 85/100

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def solution(orders, course):
    answer = []
    arr_set = set()
    for i in range(len(orders)):
        for j in range(len(orders[i])):
            arr_set.add(orders[i][j])
        orders[i] = set(orders[i])
        
    for n in course:
        arr = []
        cnt = 2
        nCr = itertools.combinations(arr_set,n)
        for x in list(nCr):
            tmp = 0
            for p in orders:
                if set(x) <= p:
                    tmp += 1
            k = sorted(x)
            word = ''.join(k)
            if tmp > cnt:
                cnt = tmp
                arr = [word]
            elif tmp == cnt:
                arr.append(word)
        answer += arr
    answer.sort()
    return answer

반복문을 남발하여서 그런지, 4개 정도의 테스트케이스가 시간초과로 통과하지 못했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from itertools import combinations
from collections import Counter

def solution(orders, course):
    answer = []
    for n in course:
        arr = []
        for order in orders:
            for x in combinations(order, n):
                word = ''.join(sorted(x))
                arr.append(word)
        sorted_arr = Counter(arr).most_common()
        for menu, cnt in sorted_arr:
            if cnt > 1 and cnt == sorted_arr[0][1]:
                answer.append(menu)
    answer.sort()
    return sorted(answer)

몇몇가지 케이스를 줄여선 시간초과 문제를 해결할 수 없을 거라고 생각하여 아예 로직을 바꾸었다.