https://programmers.co.kr/learn/courses/30/lessons/60060
<풀이>
이진탐색 라이브러리인 bisect의 bisect_left와 bisect_right을 이용하여 같은 길이의 가사들 중에서 쿼리를 포함하는 단어의 첫 인덱스, 마지막 인덱스 차이를 구한다 !
이진 탐색 라이브러리 bisect 정리 : https://sinclairstudio.tistory.com/85
from bisect import bisect_left, bisect_right
def count_by_range(word, left_value, right_value):
right_index = bisect_right(word, right_value)
left_index = bisect_left(word, left_value)
return right_index - left_index
def solution(words, queries):
answer = []
array = [[] for _ in range(10001)]
reversed_array = [[] for _ in range(10001)]
for word in words:
array[len(word)].append(word)
reversed_array[len(word)].append(word[::-1])
for i in range(10001):
array[i].sort()
reversed_array[i].sort()
for query in queries:
if query[0] != '?': # fro??? 같은 경우
count = count_by_range(array[len(query)], query.replace('?','a'), query.replace('?','z'))
answer.append(count)
else:
count = count_by_range(reversed_array[len(query)], query[::-1].replace('?','a'), query[::-1].replace('?','z'))
answer.append(count)
return answer
'Algorithm (PS)' 카테고리의 다른 글
[백준] 11728 배열 합치기 in Python + 반복문 대신 join()으로 출력하기 (0) | 2022.01.26 |
---|---|
[백준] 11404 플로이드 -> 최단 경로 찾기 알고리즘 (0) | 2022.01.25 |
[백준] 2110 공유기 설치 in Python (0) | 2022.01.25 |
[카카오2019] 실패율 in Python (0) | 2022.01.25 |
[백준] 10825 국영수 in Python + lambda 함수 정리 (0) | 2022.01.24 |