์ด์ง„ ํƒ์ƒ‰(Python)

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()์„ ๊ผญ ํ˜ธ์ถœํ•˜์ž. ์—”ํ„ฐ๊ฐ€ ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ์ž…๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ง€์›Œ์ค˜์•ผ ํ•œ๋‹ค.