# 2020 KAKAO BLIND RECRUITMENT 순위 검색
from collections import defaultdict
from bisect import bisect_left
def solution(info, query):
dic = defaultdict(
lambda: defaultdict(
lambda: defaultdict(
lambda: defaultdict(list),
),
),
)
for item in info:
item = item.split()
dic[item[0]][item[1]][item[2]][item[3]].append(int(item[4]))
def score_check(d, q):
result = 0
d.sort()
return len(d) - bisect_left(d, int(q[4]))
def pc_check(d, q):
if q[3] == "-":
result = 0
for k in d.keys():
result += score_check(d[k], q)
return result
else:
return score_check(d[q[3]], q)
def js_check(d, q):
if q[2] == "-":
result = 0
for k in d.keys():
result += pc_check(d[k], q)
return result
else:
return pc_check(d[q[2]], q)
def bf_check(d, q):
if q[1] == "-":
result = 0
for k in d.keys():
result += js_check(d[k], q)
return result
else:
return js_check(d[q[1]], q)
def language(d, q):
if q[0] == "-":
result = 0
for k in dic.keys():
result += bf_check(d[k], q)
return result
else:
return bf_check(d[q[0]], q)
result = []
for st in query:
q = st.split(" and ")
temp = q[-1].split(" ")
q[-1] = temp[0]
q.append(temp[1])
result.append(language(dic, q))
return result
# 2020 KAKAO BLIND RECRUITMENT 순위 검색
from collections import defaultdict
from itertools import product
from bisect import bisect_left
def solution(info, query):
dic = defaultdict(list)
for item in info:
item = item.split()
slot = []
for i in range(4):
slot.append({"-", item[i]})
for i in product(*slot):
dic["".join(i)].append(int(item[4]))
for k in dic.keys():
dic[k].sort()
result = []
for q in query:
q = q.replace(" and ", " ").split(" ")
score = int(q[-1])
q = q[:-1]
t = dic["".join(q)]
result.append(len(t) - bisect_left(t, score))
return result
처음 풀때는 완전 구조를 완벽히 짜서 풀었는데 아무래도 재귀 같은 부분과 구조를 다 거쳐가기 때문에 시간초과에 걸렸던거라 생각한다.