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
반응형
'꿀팁' 카테고리의 다른 글
intellij. 서식 지우고 복사하는 법 (copy as plain text) (0) | 2023.10.27 |
---|---|
chatgpt 통해 백엔드 기술면접/임원면접 준비하기 (0) | 2023.10.12 |
web. 트래픽이란, 확인하는법 (0) | 2023.07.20 |
safari. 아이폰/아이패드 safari debug 하는 법 (0) | 2023.03.08 |
workbench. 한글깨짐 없이 엑셀 다운로드 받기 (0) | 2023.03.06 |