Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- 이진탐색 #나무 자르기
- 오픽노잼
- 메모이제이션
- 오픽가격
- topdown
- 오픽공부법
- 영어말하기
- dp
- 다이나믹프로그래밍
- ㅂ
- 오픽노잼공부방법
- 오픽점수잘받는방법
- 오픽
- 바텀업
- 안드로이드주석
- 탑다운
- fibo
- dynamicProgramming
- XML
- English
- stack 스택
- XML주석
- 영어회화
- 이진탐색
- 안드로이드
- opic
- 피보나치수열
- 디피
- 주석
													Archives
													
											
									RUBY
[카카오] 가사 검색 본문
출처:: programmers.co.kr/learn/courses/30/lessons/60060
분류:: 이분탐색
1. 문제 이해 및 해결과정
| - bisect이용 1. words의 길이를 세서 길이 별로 배열을 따로 저장한다. 2. 접두사를 해결하기 위해 words를 뒤집은 배열을 저장한다 3. 정렬 4. count_by_range()함수를 이용해서 접미사에 ? 있으면 a부터 z까지의 범위 내의 개수를 찾는다 ex) fro?? 라면 froaa보다 크거나 같고 frozz보다 작거나 같은 단어의 개수를 센다 5. 접두사에 ? 인경우를 처리하기 위해 reversed를 이용한다 6. 개수 저장한다 | 
2. 풀이방법
1. python 이분탐색
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
arr = [[] for _ in range(10001)]
reversed_arr = [[] for _ in range(10001)]
def solution(words, queries):
    answer = []
    for word in words: 
        arr[len(word)].append(word)
        reversed_arr[len(word)].append(word[::-1]) #뒤집어서 삽입
        
    for i in range(10001): #정렬
        arr[i].sort()
        reversed_arr[i].sort()
    
    for q in queries:
        if q[0] != '?': #접두사에 와일드 카드 
            res=count_by_range(arr[len(q)],q.replace('?','a'),q.replace('?','z'))
        else:
            res=count_by_range(reversed_arr[len(q)],q[::-1].replace('?','a'),q[::-1].replace('?','z'))
        answer.append(res)
    return answer
3. 오답원인
4. 알게된 점
'PS > This' 카테고리의 다른 글
| [이론] 구현 (0) | 2020.09.10 | 
|---|---|
| [이론] 투포인터(Two pointers) (0) | 2020.09.09 | 
| 문자열 재정렬 (0) | 2020.09.08 | 
| [카카오] 괄호 변환 (0) | 2020.09.07 | 
| [백준] 병사 배치하기 (0) | 2020.09.01 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				