์ด์ง ํ์
๐ก ์์ด๋์ด
๋ฐฐ์ด์์ ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ขํ๊ฐ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ํ์ํด๋ณด์!!
โญ๋จ, ๋ฐฐ์ด ๋ด ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์์ด์ผ ํ๋ค.โญ
๐ก ์๊ณ ๋ฆฌ์ฆ ์ค๋ช
- ํ์ํ๊ณ ์ ํ๋ ๋ฒ์(start, end)๋ฅผ ์ ํ๋ค.
- start์ end ์ฌ์ด mid๋ฅผ ์ ํ๋ค.
- mid์ ๋ฐ์ดํฐ์ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ค.
1) ๊ฐ์ ๊ฒฝ์ฐ
- ํ์์ ์ข ๋ฃํ๋ค.
2) ์ค๊ฐ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ ํด ๊ฒฝ์ฐ
- end๋ฅผ (mid - 1)๋ก ์ค์ ํด mid์ ์ผ์ชฝ์ ํ์ํ๋ค.
3) ์ค๊ฐ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ ์์ ๊ฒฝ์ฐ
- start๋ฅผ (mid + 1)๋ก ์ค์ ํด mid์ ์ค๋ฅธ์ชฝ์ ํ์ํ๋ค. - start์ end ์ฌ์ด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๋์ 2~3์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๐ก ์์ค ์ฝ๋
๋ค์์ array ๋ด์ target์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์์ ๋ฐํํ๋ ํจ์์ด๋ค.
- ์ฌ๊ทํจ์๋ก ๊ตฌํํ ์ด์ง ํ์
def binarySearch(array, target, start, end):
if start > end:
return None
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
return binarySearch(array, target, start, mid - 1)
else:
return binarySearch(array, target, mid + 1, end)
- ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํํ ์ด์ง ํ์
def binarySearch2(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
๐ก ์ฝ๋ฉ ํ ์คํธ์์์ ์ด์ง ํ์
์ฝ๋ฉ ํ ์คํธ์์์ ์ด์ง ํ์ ๋ฌธ์ ๋ ์ฃผ๋ก ํ์ ๋ฒ์๊ฐ ํฐ ์ํฉ์์์ ํ์์ ๊ฐ์ ํ๋ ๋ฌธ์ ๊ฐ ๋ง๋ค. ๋ฐ๋ผ์ ํ์ ๋ฒ์๊ฐ 2000๋ง์ ๋์ด๊ฐ๋ฉด ์ด์ง ํ์์ ๋ ์ฌ๋ ค๋ณด์!
์ฐธ๊ณ ๋ก ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ์ ๊ฐ์๋ ๊ฐ์ด 1000๋ง ๋จ์ ์ด์์ผ๋ก ๋์ด๊ฐ๋ฉด ์ด์ง ํ์๊ณผ ๊ฐ์ด O(logN)์ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ ค์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด์ง ํ์ ๋ฌธ์ ๋ฅผ ํ ๋, ๋ง~~~์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ input()์ผ๋ก ๋ฐ์ผ๋ ค ํ๋ฉด ์๊ฐ ์ด๊ณผ๋ก ์ค๋ต ํ์ ์ ๋ฐ์ ์ ์๋ค. ์ด๋ด ๋ sys ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ readline() ํจ์๋ฅผ ์ด์ฉํ๋ฉด input() ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ด๋ ์ ๋์ผ ๋ ์จ์ผ ํ๋์ง๋ ์์ง ๊ฐ์ด ์ ์จ๋ค..!๐ฅ
# ๋น ๋ฅด๊ฒ ์
๋ ฅ ๋ฐ๊ธฐ
import sys
input = lambda: sys.stdin.readline().rstrip()
data = list(map(int, input().split()))
print(data)
์ฐธ๊ณ ์๋ฃ: ์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ๋ค with Python (๋๋๋น ์ , ํ๋น๋ฏธ๋์ด)