์ด์งํ์์ด๋?
์ด์งํ์์ ๋ฐฐ์ด ๋ด๋ถ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ๋ง ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ขํ๊ฐ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ํน์ง์ด ์๋ค. ์ด์งํ์์ ์์น๋ฅผ ๋ํ๋ด๋ ๋ณ์ 3๊ฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ ํ์ํ๊ณ ์ ํ๋ ๋ฒ์์ ์์์ , ๋์ , ์ค๊ฐ์ ์ด๋ค. ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ์ ์ค๊ฐ์ ์์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ฒ ์ด์ง ํ์ ๊ณผ์ ์ด๋ค. ์ ๋ฐ์ฉ ๋ฐ์ดํฐ๋ฅผ ์ค์ด๋ค๋๋ก ๋ง๋ ๋ค๋ ์ ์ ํต์ ๋ ฌ๊ณผ ๊ณตํต์ ์ด ์๋ค.
์ด์งํ์ ํ์ด์ฌ์ผ๋ก ๊ตฌํํ๊ธฐ
def binary_search1(array, target, start, end):
if start>end:
return None;
mid=(start+end)//2;
if array[mid]==target:
return mid;
elif array[mid]>target: #์ค๊ฐ์ ๋ณด๋ค ํ๊ฒ์ด ์์ ๊ฒฝ์ฐ
return binary_search1(array, target, start, mid-1);
else: #์ค๊ฐ์ ๋ณด๋ค ํ๊ฒ์ด ํฐ ๊ฒฝ์ฐ
return binary_search1(array, target,mid+1,end);
def binary_search2(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;
n, target=list(map(int, input().split()))
array=list(map(int, input().split()))
result=binary_search2(array,target,0,n-1);
if result==None:
print('์์๊ฐ ์กด์ฌํ์ง ์์.')
else:
print((result+1),'๋ฒ์งธ์ ์กด์ฌํจ.')
๋จ๊ณ๋ง๋ค ํ์ ๋ฒ์๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋๋ฏ๋ก ์ฐ์ฐ ํ์๋ logN์ ๋น๋ก. ์๊ฐ๋ณต์ก๋๋ O(logN).
ํ์ด์ฌ ์ด์งํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
from bisect import bisect_left,bisect_right
from itertools import count
a=[1,2,4,4,8]
x=4
print(bisect_left(a,x)) #2
print(bisect_right(a,x)) #4
#๊ฐ์ด ํน์ ๋ฒ์์ ์ํ๋ ๋ฐ์ดํฐ ๊ฐ์ ๊ตฌํ๊ธฐ
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;
a=[1,2,3,3,3,3,3,4,4,8,9]
#๊ฐ์ฑ 4์ธ ๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅ
print(count_by_range(a,4,4)) #2
#๊ฐ์ด 1~3 ๋ฒ์์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅ
print(count_by_range(a,1,3)) #7
bisect_left(a, x) : ์ ๋ ฌ๋ ์์๋ฅผ ์ ์งํ๋ฉด์ ๋ฐฐ์ด a์ x๋ฅผ ์ฝ์ ํ ๊ฐ์ฅ ์ผ์ชฝ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
bisect_right(a, x) : ์ ๋ ฌ๋ ์์๋ฅผ ์ ์งํ๋ฉด์ ๋ฐฐ์ด a์ x๋ฅผ ์ฝ์ ํ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
ํ๋ผ๋ฉํธ๋ฆญ ์์น(Parametric Search)
ํ๋ผ๋ฉํธ๋ฆญ ์์น๋ ์ต์ ํ ๋ฌธ์ ๋ฅผ ๊ฒฐ์ ๋ฌธ์ ๋ก ๋ฐ๊พธ์ด ํด๊ฒฐํ๋ ๊ธฐ๋ฒ
(ํน์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํน์ ๋ณ์์ ์ต์๊ฐ, ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ๊ฒฐ์ ๋ฌธ์ ๋ก ๋ฐ๊พธ์ด ํธ๋ ๊ฒ)
์ผ๋ฐ์ ์ผ๋ก ์ฝ๋ฉ ํ ์คํธ์์ ํ๋ผ๋ฉํธ๋ฆญ ์์น ๋ฌธ์ ๋ ์ด์ง ํ์์ ์ด์ฉํ์ฌ ํด๊ฒฐ ๊ฐ๋ฅ.
ํ๋ผ๋ฉํธ๋ฆญ ์์น๋ฅผ ์ด์ฉํด์ ๋ต์ ๊ตฌํ ์ ์์ผ๋ ค๋ฉด..
1) ๊ฒฐ์ ๋ฌธ์ ๋ฅผ ์ ์ํ์ ๋, ์ฝ๊ฒ ํ ์ ์๋ ๊ฒฝ์ฐ
2) ์ต์๊ฐ์ด x๋ผ๋ฉด, x ์ด์์ ๊ฐ์ ๋ํด์๋ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑ
3) ์ต๋๊ฐ์ด x๋ผ๋ฉด, x ์ดํ์ ๊ฐ์ ๋ํด์๋ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑ
https://sarah950716.tistory.com/16
'์๊ณ ๋ฆฌ์ฆ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฌธ์ ํ์ด[ํ.๊ทธ.๋จธ] - ๊ณต์ ์ฐ์ฑ , ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2023.07.04 |
---|---|
๋ฌธ์ ํ์ด[ํ.๊ทธ.๋จธ] - ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ, ์ถ์ต ์ ์ (0) | 2023.07.03 |
ํ์ ์๊ณ ๋ฆฌ์ฆ(Greedy) (0) | 2023.07.03 |
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(๋์ ๊ณํ๋ฒ) (0) | 2023.03.22 |
์ฌ๊ทํจ์, ์ฌ๊ท์ ์ฌ๊ณ (2) | 2023.03.15 |