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 |
Tags
- API
- BindingResult
- 기본키 전략
- 백준
- JPA
- m:n
- @SubscribeMapping
- 쿠키
- DTO
- @Autowired
- compgen
- 편향된 지수
- allocationSize
- 컴파일 타임 상수
- 런타임 상수
- 파이썬
- 커밋 되돌리기
- intelij spring config
- Git
- 무한정 대기
- 티스토리챌린지
- 프로그래머스
- 리눅스
- JDBC
- spring
- 은행원알고리즘
- 오블완
- 쉘 스크립트
- 알고리즘
- application layer
Archives
- Today
- Total
둘셋 개발!
[알고리즘] 가사검색 - 이진탐색 본문
✏️ 문제 링크:
https://programmers.co.kr/learn/courses/30/lessons/60060
소스코드와 아이디어는 '이것이 취업을 위한 코딩테스트다 with 파이썬' 동빈나 저자님에서 따온 것임을 알립니다!
✏️ 소스 코드:
from bisect import bisect_left, bisect_right
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] != '?':
result = count_by_range(array[len(q)],q.replace('?','a'), q.replace('?','z'))
else:
result = count_by_range(reversed_array[len(q)],q[::-1].replace('?','a'), q[::-1].replace('?','z'))
answer.append(result)
return answer
✏️ 설명:
중요한 아이디어는 다음과 같다
- 단어 길이에 따라 각각 배열에 따로 집어 넣기
- bisect 라이브러리를 활용하여 키워드가 담긴 단어의 갯수 구하기
- 접두사에 ?가 있는 것과 접미사에 ?가 있는 것을 따로 계산
만약 'fro??'가 queries로 주어진다면
접미사가 ?이고 ,단어의 길이가 5개인 배열에서 , 'froaa' ~ 'frozz' 사이에 있는 단어의 갯수를 찾아내는 것이다.
만약 '????o'가 queries로 주어진다면
접두사가 ?이고, 단어의 길이가 5개인 배열에서, 'oaaaa' ~ 'ozzzz' 사이에 있는 단어의 갯수를 찾아내는 것이다.
나도 같은 아이디어를 생각해냈지만..... 정돈하지 못했던 것 같다.
반복해보잣
'알고리즘' 카테고리의 다른 글
[알고리즘] 주사위 굴리기 - 구현 (0) | 2022.10.24 |
---|---|
[알고리즘] 게임 맵 최단거리 - bfs/dfs (0) | 2022.08.14 |
[알고리즘] 백준 공유기 설치 - 이진탐색 (0) | 2022.06.18 |
[알고리즘] 프로그래머스 메뉴 리뉴얼 (0) | 2022.06.08 |
[알고리즘] 프로그래머스 오픈채팅방 - 시간 초과 해결 (0) | 2022.06.08 |