-
[Binary Search] kakao 60060 ๊ฐ์ฌ ๊ฒ์Algorithms in Python/programmers 2021. 1. 24. 17:13
๐ kakao 60060 ๊ฐ์ฌ ๊ฒ์
programmers.co.kr/learn/courses/30/lessons/60060
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๊ฐ์ฌ ๊ฒ์
programmers.co.kr
โ ๋ฌธ์ ์ ํต์ฌ, ํ์ด ๊ณผ์
• '?'๋ ๊ธ์ ํ๋๋ฅผ ์๋ฏธํ๋ค.
=> ์๋ฅผ ๋ค์ด, "fro??" ๋ ๊ธธ์ด๊ฐ 5์ธ ๋จ์ด์ด๋ฉฐ, ๊ธธ์ด๊ฐ 5์ธ ๋จ์ด๋ฆฌ์คํธ์์ ์ฐพ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
=> ๋ชจ๋ ๋จ์ด๋ค์ด ๋ด๊ธด ๋ฐฐ์ด words์์ ๊ฐ ๋จ์ด๋ค์ ๊ธธ์ด๋ณ๋ก ๊ตฌ๋ถํ์ฌ ์ ์ฅํ๋ค.
• ์์ผ๋์นด๋ ๋ฌธ์์ธ '?'๋ ๋ฐ๋์ ํ๋ ์ด์ ํฌํจ๋์ด์์ผ๋ฉฐ, ๊ฒ์ ํค์๋์ ์ ๋์ฌ ์๋๋ฉด ์ ๋ฏธ์ฌ์ด๋ค.
=> ์ ๋์ฌ์ธ ๊ฒฝ์ฐ ๋จ์ด๋ฅผ ๋ค์ง์ด์ ์ ์ฅํ๋ค. -> reversed_arr ์ด์ฉ
• ๋ชจ๋ ๋จ์ด๋ค์ด ๋ด๊ธด ๋ฐฐ์ด words์์ ํค์๋๊ฐ ๋ด๊ธด ๋ฐฐ์ด queries์ ํค์๋ ๋ณ๋ก ๋งค์น๋ ๋จ์ด๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ ์ฐพ์์ผ ํ๋ค.
=> ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ๋ฉฐ ํค์๋์ ๋งค์น๋๋ ๋จ์ด๊ฐ ๋ช ๊ฐ์ธ์ง ์ผ๋ค.
- bisect_left, bisect_right๋ฅผ ์ด์ฉํ count_by_range๋ฅผ ์ด์ฉํ๋ค.
โ ์ ์ฒด ์ฝ๋
import bisect # ๊ฐ์ด [left_val, right_val] ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํจ์ def count_by_range(a, left_val, right_val): right_index = bisect.bisect_right(a, right_val) left_index = bisect.bisect_left(a, left_val) 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 x in queries: if x[0] != '?': # ___a ~ ___z ๊น์ง์ ๋จ์ด ๊ฐฏ์๋ฅผ ์ฐพ์ result = count_by_range(arr[len(x)], x.replace('?', 'a'), x.replace('?', 'z')) else: result = count_by_range(reversed_arr[len(x)], x[::-1].replace('?', 'a'), x[::-1].replace('?', 'z')) answer.append(result) return answer
์ ์ ์ด์ง ํ์ ๋ฌธ์ ๋ง ์ ํ๋ค ๋ฌธ์๋ก ๋ ๊ฒ์ ํ๋ ค๋ ๋ฌธ์์ด ์ฒ๋ฆฌ๋ ๋ฒ์ ๋ถ๋ถ์์ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ด ์กํ์ง ์์๋ค. ํ์ด์ฌ ๋ฌธ์์ด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ์๊ฐ ์๋ ๊ฒ ๊ฐ๊ณ , ๋ฌธ์์ด๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๋ ํ์ด๋ด์ผ๊ฒ ๋ค.
* ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ - ๋๋๋น
'Algorithms in Python > programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Impl] kakao 60057 ๋ฌธ์์ด ์์ถ (0) 2021.02.22