728x90
이분탐색은 간단하게 절반씩 줄여나가며 값을 찾는 방법이다.
논리는 중학생도 이해할 수 있는 간단한 로직이다. 그러나 문제를 풀다보면 lo < hi 인지 lo <= hi 인지 등 헷갈리는 경우가 많고 lo = mid 인지 lo = mid + 1로 갱신해야하는지 잘 모를 때가 있다.
https://www.acmicpc.net/blog/view/109
이분 탐색(Binary Search) 헷갈리지 않게 구현하기
개요 이분 탐색은 off-by-one error가 발생하기 쉬워서 늘 헷갈립니다. 이분 탐색 문제를 풀다보면 탈출 조건으로 lo <= hi, lo < hi, lo + 1 < hi 중 어느 걸 선택해야 할 지, 정답이 lo인지 hi인지 (lo + hi) / 2
www.acmicpc.net
이분탐색에 대한 정말 좋은 글이다. 이 글을 정독하고 정리를 했다.
먼저 가장 좋은 방법은 while(lo + 1 < hi) 이다. 이렇게 하면 lo, hi 모두 mid로 갱신하면 문제를 풀 수 있다. mid 값을 + 1 or -1 로 갱신했던 이유는 결국 무한루프에 빠지는 것을 막기 위함이다.
lo + 1 < hi 를 해놓으면, 언제나 lo < mid < hi 를 보장할 수 있다. lo = hi 이면 while 조건에 의해 탈출하게 될 것이기 때문이다. 이 방법이 가장 간단하고 오류없이 찾을 수 있는 방법인 것 같다.
'CS > 자료구조,알고리즘' 카테고리의 다른 글
플로이드-워셜 알고리즘 (2) | 2023.12.26 |
---|---|
최소 공통 조상 LCA: Lowest Common Ancestor (0) | 2023.12.12 |
문자열 관리 자료구조 - 트라이(Trie) 개념/구현 (0) | 2023.02.24 |
DFS를 활용한 순열 (0) | 2023.02.23 |
유클리드 호제법(Euclidean algorithm) - 최대공약수, 최소공배수 알고리즘 (0) | 2023.02.22 |