순위 검색

jiholee·2022년 2월 3일
0

알고리즘

목록 보기
14/20

순위 검색

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” 이런 경우 때문에 안된다.

0개의 댓글