본문 바로가기
코딩 테스트/이진 탐색

기사 검색

by hazel_ 2021. 2. 20.

p. 370

 

from bisect import bisect_left, bisect_right

def count_by_value(array, left_q, right_q):
    left=bisect_left(array, left_q)
    right=bisect_right(array, right_q)

    return right-left

def solution(words, queries):
    answer = []
    
    # 단어들의 길이 별로 배열 만들기
    array=[[] for _ in range(10001)]
    reverse_array=[[] for _ in range(10001)]

    # 단어의 길이에 맞게 배열에 저장
    for word in words:
        array[len(word)].append(word)
        reverse_array[len(word)].append(word[::-1])
    
    # 배열 정렬
    for i in range(10001):
        array[i].sort()
        reverse_array[i].sort()
    
    for q in queries:
        if q[0]=='?': # 접미사
            answer.append(count_by_value(reverse_array[len(q)],q[::-1].replace('?','a'),q[::-1].replace('?','z')))
        else:
            answer.append(count_by_value(array[len(q)],q.replace('?','a'), q.replace('?','z')))

    return answer

'코딩 테스트 > 이진 탐색' 카테고리의 다른 글

공유기 설치  (0) 2021.02.20
고정점 찾기  (0) 2021.02.18
정렬된 배열에서 특정 수의 개수 구하기  (0) 2021.02.18
떡볶이 떡 만들기  (0) 2021.02.18
부품 찾기  (0) 2021.02.18

댓글