"-" 이거 때문에 모든 경우의 수를 전부 생각해야한다.
위의 그림처럼 모든 경우의 수를 생각하면 16가지가 나온다.
이 16가지를 하나의 dict에 넣어준다.
key값은 언어, 직군, 경력, 소울푸드의 str을 전부 하나의 문자열로 합쳐서 넣어준다.
value는 defaultdict(list)를 이용해 list 타입으로 전부 초기화 해주고 append 해준다.
그 후, list에 쌓여있는 숫자들을 전부 정렬해준다.
queries를 순회하며, 특정 점수 이상의 숫자를 찾을 때 이분탐색 알고리즘을 이용하여 찾는다.
from itertools import combinations
from collections import defaultdict
def solution(information, queries):
answer = []
dic = defaultdict(list)
for info in information:
info = info.split()
condition = info[:-1]
score = int(info[-1])
for i in range(5):
case = list(combinations([0,1,2,3], i))
for c in case:
tmp = condition.copy()
for idx in c:
tmp[idx] = "-"
key = ''.join(tmp)
dic[key].append(score)
for k in dic.keys():
dic[k].sort()
for q in queries:
q = q.split(" and ")
condition = ''.join(q[:-1]) + q[-1].split()[0]
score = int(q[-1].split()[-1])
if not len(dic[condition]):
answer.append(0)
else:
start, end = 0, len(dic[condition]) - 1
while start <= end:
mid = (start + end) // 2
if dic[condition][mid] >= score:
end = mid - 1
else:
start = mid + 1
answer.append(len(dic[condition]) - start)
return answer