Kelly's journey to a coding master
2020 카카오 블라인드 채용 - 가사 검색 본문
[문제]
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[첫번째 시도] 실패 - 정확성O/ 효율성X
def solution(words, queries):
answer = []
for query in queries:
count = 0
for word in words:
if len(query) != len(word):
continue
for i in range(len(query)):
if query[i] != '?' and query[i] != word[i]:
break
if i == len(query)-1:
count += 1
answer.append(count)
return answer
문제점: 문제의 '검색 키워드 제한사항'을 충분히 숙지하지 않고 접근했음.
[두번째 시도] 실패 - 정확성O/ 효율성X
def solution2(words, queries):
answer = []
reversed_words = ["".join(reversed(word)) for word in words]
for query in queries:
if query[0] == '?':
reversed_query = "".join(reversed(query))
lower_bound = reversed_query.replace('?', 'a')
upper_bound = reversed_query.replace('?', 'z')
count = 0
for word in reversed_words:
if len(word) != len(query):
continue
if word >= lower_bound and word <= upper_bound:
count += 1
else:
lower_bound = query.replace('?', 'a')
upper_bound = query.replace('?', 'z')
count = 0
for word in words:
if len(word) != len(query):
continue
if word >= lower_bound and word <= upper_bound:
count += 1
answer.append(count)
return answer
[세번째 시도] 성공 - 정확성O/ 효율성O
from collections import defaultdict
from bisect import bisect_left, bisect_right
def solution(words, queries):
answer = []
word_list = defaultdict(list)
rev_word_list = defaultdict(list)
for word in words:
word_list[len(word)].append(word)
rev_word_list[len(word)].append(word[::-1])
for key in word_list.keys():
word_list[key].sort()
rev_word_list[key].sort()
for query in queries:
start = query.replace('?', 'a')
end = query.replace('?', 'z')
if query[0] == '?':
lst = rev_word_list[len(query)]
s = bisect_left(lst, start[::-1])
e = bisect_right(lst, end[::-1])
else:
lst = word_list[len(query)]
s = bisect_left(lst, start)
e = bisect_right(lst, end)
answer.append(e-s)
return answer
words = ["frodo", "front", "frost", "frozen", "frame", "kakao"]
queries = ["fro??", "????o", "fr???", "fro???", "pro?"]
print(solution(words, queries))
'Algorithm' 카테고리의 다른 글
백준 1926번 그림 (1) | 2024.02.09 |
---|---|
2023 카카오 신입 공채 1차 온라인 코딩 테스트 - 개인정보 수집 유효기간 (0) | 2023.12.28 |
백준 1956번 운동 (0) | 2023.08.17 |
2021 카카오 블라인드 채용 - 순위 검색 (0) | 2022.07.10 |
백준 15686번 치킨 배달 (0) | 2022.07.06 |