2020. 8. 28. 15:24ใ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค/ํ์
์ด์ง ํ์(Python)
์ค๋ ๋ฐฐ์ ๋ณผ ๋ด์ฉ์ ์ด์งํ์์ด๋ค.
์ด์งํ์์ ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ขํ๊ฐ๋ฉด์ ํ์ํ๋ค๋ ํน์ง์ด ์๋ค. ๋ํ ๋ฐฐ์ด ๋ด๋ถ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ ๋์ด ์์ด์ผ๋ง ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ฐธ๊ณ ํ๋๋ก ํ์.
ํต์ฌ์ ์ด๋ ๋ค.
"์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ์ ์ค๊ฐ์ ์์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํ๋ค"
์์๋ฅผ ๋ค์ด๋ณด์.
0 | 2 | 4 | 6 | 8 |
๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด์ด ์๋ค. 2๋ผ๋ ์์ฐจ๋ ๋ช๋ฒ ์ธ๋ฑ์ค์ ์์๊น? ๋ผ๋ ๋ฌธ์ ๊ฐ ๋์์ ๋ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ด๋ ๋ค.
1. ์ฌ๊ทํจ์๋ฅผ ์ ์ํ๋ค (start, end,target, array๊ฐ ์กด์ฌํ๋)
2. start์ end๋ฅผ 2๋ก ๋๋์ด ๋ชซ๋ง ์ถ๋ฆฐ ๊ฐ์ mid๋ก ๋๋ค.
3. mid๊ฐ๊ณผ target์ ์ค์ ์ ์ผ๋ก ๋น๊ตํด ๊ฐ๋ค๋ฉด return mid, mid๊ฐ ํฌ๋ค๋ฉด mid๋ค์๋ ์ ๊ฒฝ ์์จ๋ ๋๊ธฐ ๋๋ฌธ์ start๋ ๊ทธ๋๋ก ๋๊ณ end๊ฐ์ mid-1๋ก ๋ ๋ค ์ฌ๊ทํจ์๋ฅผ ๋๋ฆฌ๋ฉด ๋๋ค. mid๊ฐ ์์ ๊ฒฝ์ฐ์๋ ๋ฐ๋๋ก ํด์ค๋ค.
4. ๋ง์ง๋ง return ๋ ๊ฐ์ +1์ ํด์ค์ผ ํ๋ค(์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ)
์๋ ์์ค์ฝ๋๋ฅผ ํตํด ํ์ธํด๋ณด์.
def binary_search(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_search(array, target, start, mid-1)
else :
return binary_search(array, target, mid+1, end)
n, target = map(int, input().split())
array = list(map(int,input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("๊ฐ์ด ์กด์ฌํ์ง ์์ต๋๋ค.")
else :
print(result+1)
์ด์ง ํ์์ ํ์ ๋ฒ์๊ฐ 2,000๋ง์ ๋๊ฑฐ๊ฐ๊ฑฐ๋, ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ์ ๊ฐ์๋ ๊ฐ์ด 1,000๋ง ๋จ์ ์ด์์ผ๋ก ๋์ด๊ฐ๋ฉด ๊ณ ๋ คํด์ผ ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ณดํต ์ด๋ ๊ฒ ๋ฐ์ดํฐ์ ๊ฐ์ด ํฐ ๊ฒฝ์ฐ์๋ input()์ผ๋ก ์ ๋ ฅ์ ๋ฐ์ผ๋ฉด ์๋๊ฐ ๋๋ ค์ ์ค๋ต ํ์ ์ ๋ฐ์ ์๊ฐ ์๋ค.
์ด์ ๊ฐ์ ๊ฒฝ์ฐ์๋ sys ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ readline() ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ด๋ ๋ค.
import sys
input_data = sys.stdin.readline().rstrip()
print(input_data)
sys ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ๋๋ ๋ค์ rstrip()์ ๊ผญ ํธ์ถํ์. ์ํฐ๊ฐ ์ค๋ฐ๊ฟ์ผ๋ก ์ ๋ ฅ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ง์์ค์ผ ํ๋ค.
'์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค > ํ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ก๋ณถ์ด ๋ก ๋ง๋ค๊ธฐ(Python) (0) | 2020.08.31 |
---|---|
๋ถํ ์ฐพ๊ธฐ(Python) - ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค (0) | 2020.08.28 |