728x90
๋ฌธ์ ์ ๋ชฉ | ์ ๋ต๋ฅ | ๋์ด๋ |
๊ฐ์ฌ ๊ฒ์ | 47% | Lv.4 |
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ์์ฝ
๋
ธ๋์ ์๋ ๋จ์ด ์งํฉ words(์ค๋ณต X), ๊ฒ์ ํค์๋ ์งํฉ queries๊ฐ ์ฃผ์ด์ง๋ค.
์กฐ๊ฑด 1) words 2~100,000๊ฐ, word ๊ธธ์ด 1~10,000, ์๋ฌธ์๋ก๋ง ๊ตฌ์ฑ
์กฐ๊ฑด 2) queries์ ๊ธธ์ด 2~100,000, query์ ๊ธธ์ด 1~10,000,? ํ๋ ์ด์ ํฌํจ(์ ๋์ฌ๋ ์ ๋ฏธ์ฌ๋ก๋ง ๊ฐ๋ฅ)
ํ์ด
Step1. ํจ์จ์ฑ ํ
์คํธ ์กด์ฌ->search์ binary search(log n) ์๊ฐ (words*queries์ ์๊ฐ๋ณต์ก๋ ์ด๊ณผ)
Step2. ์ ๋์ฌ์ ์ ๋ฏธ์ฌ์ ๋ถ์ ๊ฒฝ์ฐ ์ฐจ์ด
- ์ ๋ฏธ์ฌ์ ๋ถ์๊ฒฝ์ฐ *aa~*zz๋ก ์ฐพ์ ์ ์์
- ์ ๋์ฌ๋ฅผ ์ ๋ฏธ์ฌ๋ก ๋ณํํ๋ ค๋ฉด reverse์ฌ์ฉ -> [::-1]
์ฝ๋
from collections import Counter
def search_right(words_list, word):
start_idx=0
end_idx=len(words_list)
while start_idx<end_idx:
mid=(start_idx+end_idx)//2
if words_list[mid]==word:
return idx
elif words_list[mid]<word:
start_idx=mid+1
else:#>start
end_idx=mid
return start_idx
def solution(words, queries):
# 1 ์ด์ 10,000 ์ดํ
word_list=[[] for _ in range(10001)]#0~10,000
word_list_reverse=[[] for _ in range(10001)]#0~10,000
for word in words:
word_list[len(word)].append(word)
word_list_reverse[len(word)].append(word[::-1])
for word, word_reverse in zip(word_list, word_list_reverse):
word.sort()
word_reverse.sort()
answer=[]
for query in queries:
query_count=Counter(query.split('?'))
question_len=query_count['']
if query[0]=='?':
query=query[::-1]
start=query[:-question_len]+'a'*question_len
end=query[:-question_len]+'z'*question_len
start_idx=search_right(word_list_reverse[len(query)], start)
end_idx=search_right(word_list_reverse[len(query)], end)
else:#*?
start=query[:-question_len]+'a'*question_len
end=query[:len(query)-question_len]+'z'*question_len
start_idx=search_right(word_list[len(query)], start)
end_idx=search_right(word_list[len(query)], end)
answer.append(end_idx-start_idx)
return answer
728x90
'์๊ณ ๋ฆฌ์ฆ๐ฅ > ๋ฌธ์ ํ์ด (Python)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon]16234. ์ธ๊ตฌ์ด๋ (Gold_4) 2024/4/15 (0) | 2024.04.15 |
---|---|
[Baekjoon]18405. ๊ฒฝ์์ ์ ์ผ (Gold_5) 2024/4/9 (0) | 2024.04.09 |
[Programmers] ๊ดํธ ๋ณํ (Lv.2) 2024/4/5 (0) | 2024.04.06 |
[Programmers] ๋ฌธ์์ด ์์ถ (Lv.2) 2024/4/2 (0) | 2024.04.02 |
[Programmers] ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น (Lv.3) 2024/4/1 (1) | 2024.04.01 |