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