티스토리 뷰

코딩테스트

가사 검색

ajaa 2024. 12. 15. 14:18

📌문제

https://school.programmers.co.kr/learn/courses/30/lessons/60060

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

📌풀이

각 단어를 길이에 따라 나눈 후 각 리스트를 정렬

이진 탐색을 이용하여 쿼리에 해당하는 특정 단어의 개수를 계산

 

📌코드

from bisect import bisect_left, bisect_right

#값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
def count_by_range(a, left_value, right_value):
    right_index=bisect_right(a, right_value)
    left_index=bisect_left(a, left_value)
    return right_index-left_index

#모든 단어를 길이마다 나누어서 저장하기 위한 리스트
array=[[] for _ in range(10001)]
#모든 단어를 길이마다 나누어서 뒤집어 저장하기 위한 리스트
reversed_array=[[] for _ in range(10001)]

def solution(words, queries):
    answer = []
    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 q in queries: #쿼리를 하나씩 확인
        if q[0] != '?': #접미사에 와일드카드
            res=count_by_range(array[len(q)], q.replace('?', 'a'), q.replace('?', 'z'))
        else: #접두사에 와일드카드
            res=count_by_range(reversed_array[len(q)], q[::-1].replace('?', 'a'), q[::-1].replace('?', 'z'))
        answer.append(res)        
    return answer

 

📌참고

https://g.co/kgs/eyd5SSd

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년

www.google.com

 

 

'코딩테스트' 카테고리의 다른 글

정수 삼각형  (0) 2024.12.17
금광  (1) 2024.12.16
공유기 설치  (0) 2024.12.13
고정점 찾기  (1) 2024.12.12
정렬된 배열에서 특정 수의 개수 구하기  (0) 2024.12.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함