문제 풀어보기: https://programmers.co.kr/learn/courses/30/lessons/72412
지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩테스트 점수를 하나의 문자열로 구성한 값의 배열 info, 개발팀이 궁금해하는 문의조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때,
각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
from itertools import combinations as combi
from collections import defaultdict
def solution(infos, queries):
answer = []
info_dict = defaultdict(list)
for info in infos:
info = info.split()
info_key = info[:-1]
info_val = int(info[-1])
for i in range(5): # 4가지의 정보에 대해 16가지의 조합
for c in combi(info_key, i):
tmp_key = "".join(c)
info_dict[tmp_key].append(info_val)
for key in info_dict.keys(): # 각 value(코딩테스트 점수)를 오름차순 정렬
info_dict[key].sort()
for query in queries:
query = query.split(' ')
query_score = int(query[-1])
query = query[:-1]
tmp_q = ''.join(query)
tmp_q = tmp_q.replace('and', '')
tmp_q = tmp_q.replace('-', '')
# lower bound(원하는 값 이상이 처음 나오는 위치를 탐색)
if tmp_q in info_dict:
scores = info_dict[tmp_q]
if len(scores) > 0:
start, end = 0, len(scores)
# binary search
while end > start:
mid = (start + end) // 2
if scores[mid] >= query_score:
end = mid
else:
start = mid + 1
answer.append(len(scores) - start)
else:
answer.append(0)
return answer