개발/꿀팁
이진탐색 (feat. 백준 1920)
ttoance
2023. 8. 27. 07:44
https://www.acmicpc.net/problem/1920
풀다가 이진 탐색 알고리즘을 구현하는 중에 막혔던 부분이 있어서 관련 글을 좀 더 찾아 정리한다.
left = 0
right = N - 1
mid = int((left + right)/2)
find = False
while left <= right:
#print(b, '>>', left, right, mid)
if b == A[mid]:
find = True
break
elif b > A[mid]:
left = mid + 1
elif b < A[mid]:
right = mid - 1
mid = int((left + right)/2)
#print(mid)
if find == True:
print(1)
else:
print(0)
- left와 right를 조정해서 원하는 값이 나올때까지 돌린다는 것은 어렴풋이 기억났다. 그래서 이 부분 구현까지는 어렵지 않았다.
- while 문을 나가는 조건을 처음에는 계속 mid가 나누고 나누는 값이다 보니 mid > 0 일때까지 돌리면 된다고 생각을 했다.
- 그래도 돌아가기는 하지만, 불필요한 반복문이 생기는 거다 보니 left <= right 을 해야 정상적으로 종료가 된다는 것을 배웠다.
시간복잡도는 다음과 같다.
- 최선: O(1)
- 평균: O(log N)
- 최악: O(log N)
참고 >>
- 나무위키 '이진 탐색' - https://namu.wiki/w/%EC%9D%B4%EC%A7%84%20%ED%83%90%EC%83%89
- [Algorithm] 이진 탐색(Binary Search)과 시간복잡도 - https://bkstudio.tistory.com/10
반응형