from itertools import combinations
from bisect import bisect_left
d = dict()
def solution(infos, querys):
answer = []
for info in infos:
info_list = list(info.split(' '))
score = info_list[-1] # 점수 따로 저장
info_list = info_list[:-1] # 점수 제외함, key
for i in range(len(info_list)+1):
for comb in list(combinations(info_list, i)): # key들로 만들수 있는 모든 조합
comb = ''.join(comb)
if comb in d:
d[comb].append(int(score))
else:
d[comb] = [int(score)]
for k in d:
d[k].sort()
for query in querys:
query_list = query.split(' ')
score = int(query_list[-1])
query_list = query_list[:-1]
while "and" in query_list: # and 제거
query_list.remove('and')
while '-' in query_list: # '-' 제거
query_list.remove('-')
query_key = "".join(query_list)
if query_key in d:
values = d[query_key]
low = bisect_left(values, score)
answer.append(len(values) - low)
else:
answer.append(0)
return answer
📌 실수한 점
for i in range(len(apply_list)+1):
for combi in list(combinations(apply_list, i)):
key = "".join(combi)
if key in d:
d[key].append(score)
else:
d[key] = [score]
이 부분에서 첫째줄을 for i in range(1, len(apply_list)+1):
이런 식으로 길이를 1부터 한 적이 있었는데 그러면 query 마지막 케이스인 "- and - and - and - 150” 이런 경우 때문에 안된다.