1. ์์ฐจ ํ์
: ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํ์ ๋ฐฉ๋ฒ
- ๋ฆฌ์คํธ ์์ ์๋ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ์์์๋ถํฐ ํ๋์ฉ ํ์ธ
- ์ ๋ ฌ๋์ง ์์ ๋ฆฌ์คํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ
- ํ์ด์ฌ์ count() ๋ฉ์๋ ๋ด๋ถ์์ ์์ฐจ ํ์์ด ์ฌ์ฉ๋๋ค.
๐ ์๊ฐ ๋ณต์ก๋: O(n)
# target = ์ฐพ๊ณ ์ํ๋ ์์
def search(n, target, array):
for i in range(n):
# ํ์ฌ์ ์์๊ฐ target๊ณผ ๋์ผํ๋ฉด
if array[i] == target:
return i # ํ์ฌ์ ์์น ์ธ๋ฑ์ค ๋ฐํ
2. ์ด์ง ํ์(์ด๋ถ ํ์)
: ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ๋๋๋ฉฐ ํ์ํ๋ ๋ฐฉ๋ฒ
- ๋ฐฐ์ด ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅ
- ๋ณ์ 3๊ฐ ํ์: ์์์ , ๋์ , ์ค๊ฐ์
- ์ค๊ฐ์ ์ด ์ค์ ์ผ ๋๋ ์์์ ์ดํ๋ฅผ ๋ฒ๋ฆฐ๋ค.
- ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ์ ์ค๊ฐ์ ์์น์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ฉฐ ํ์
๐ ์๊ฐ ๋ณต์ก๋: O(logN) ๋ณด์ฅ
def binary_search(array, target, start, end):
while start <= end:
mid = (start+end) //2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid -1
else:
start = mid + 1
return None
๐ ํ์ด์ฌ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ bisect
- bisect_left(a,x): ์ ๋ ฌ๋ ์์๋ฅผ ์ ์งํ๋ฉด์ ๋ฐฐ์ด a์ x๋ฅผ ์ฝ์ ํ ๊ฐ์ฅ ์ผ์ชฝ ์ธ๋ฑ์ค ๋ฐํ
- bisect_right(a,x): ์ ๋ ฌ๋ ์์๋ฅผ ์ ์งํ๋ฉด์ ๋ฐฐ์ด a์ x๋ฅผ ์ฝ์ ํ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค ๋ฐํ
from bisect import bisect_left,bisect_right
a = [1,3,4,5,5,6,6]
x = 4
print(bisect_left(a,x)) # 3
print(bisect_right(a,x)) # 5
'๐ฅ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ | ์ต๋ ํ, ์ต์ ํ (0) | 2022.02.23 |
---|---|
[Algorithm] DFS & BFS | ๊ทธ๋ํ ํ์ (0) | 2021.08.14 |
[Algorithm] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด | ์์ ์ฐพ๊ธฐ (2) | 2021.08.01 |
[Algorithm] ์ ๋ ฌ | ์ ํ ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ, ํต ์ ๋ ฌ, ๊ณ์ ์ ๋ ฌ (0) | 2021.07.27 |
[Algorithm] ๋์ ํ๋ก๊ทธ๋๋ฐ | Dynamic Programming (DP) (0) | 2021.07.11 |