https://basaeng.tistory.com/162
[1일 1알고] 징검다리 건너기
https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr차례대로 건너가며 디딤돌의 내
basaeng.tistory.com
오늘 문제를 풀어보니 꼭 이분 탐색(이진탐색)은 헷갈리는 경우가 많더라고요
아무래도 제대로 알아본적이 없어서 그런 느낌입니다.
이번 기회에 간단하게라도 알아보겠습니다.
이분 탐색
이분 탐색은 말그대로 전체를 두 부분으로 나눠가며 탐색하는 알고리즘입니다.
"0부터 100가지의 숫자 중 내가 생각하는 숫자를 맞춰봐!" 라고 했을 때
가장 수학적으로 빠르게 찾는 방법은 50을 부르고 up/down에 따라 up이라면 75 down이라면 25를 부르는 식으로 점점 범위를 좁혀가는 것이 가장 효과적입니다.
반으로 나눈다는 것은 n에 대해 log2(n)을 취한다는 것이고 따라서 n이 클수록 더 큰 효과를 볼 수 있습니다.
이분 탐색 시 사용하는 변수
기본적으로 반을 자른 공간에서 왼쪽을 봐야할지, 오른쪽을 봐야할지를 판단하기 위해서는
중간을 잡고 그 값으로 판단해야합니다.
그리고 중간을 잡기 위해서는 좌우 양끝이 필요합니다.
이를 위해 이분탐색에서는 3가지의 변수를 기본적으로 사용합니다.
(left, mid, right)
초기에는 left가 배열의 시작 혹은 가질 수 있는 최솟값, right는 배열의 끝 혹은 가질 수 있는 최댓값이 됩니다.
(물론 정렬된 배열 기준)
그렇다면 mid는 (left + mid) / 2 가 될 것입니다.
탐색 진행
만약에 찾는 값이 mid보다 작다면? left는 그대로 두고, right를 mid - 1로 하고 이후 탐색을 진행합니다.
만약에 찾는 값이 mid보다 크다면? right는 그대로 두고, left를 mid + 1로 하고 이후 탐색을 진행합니다.
종료 조건
이분탐색에서 가장 중요한 것이 종료조건이라고 생각합니다.
while문 안의 종결 조건을 잘 설정하지 않으면 꼭 조금씩 어긋나서 문제를 틀리게 되더라고요
물론 문제마다 다르지만 현재 설계의 경우 일반적으로 종료조건은 while(left <= right)입니다.
이 조건이 깨지는 경우는 left = right인 상황에서, left = mid + 1, right = mid - 1이 되는 순간입니다.
조건이 맞는 경우에 갱신하기 때문에 적절한 값이 answer가 될 것입니다.
일단은 간단하게 알아보았고
추가적으로 이분탐색 관련 문제를 풀면 이 아래에 추가해나가겠습니다.
'Algorithm > 알고리즘' 카테고리의 다른 글
| [알고리즘 알아보기] QuickSort (0) | 2026.03.30 |
|---|---|
| [알고리즘 알아보기] JPS(Jump Point Search) (0) | 2025.09.18 |
| [알고리즘 알아보기] Cellular Automata 맵 만들기 (0) | 2025.09.16 |
| [알고리즘 알아보기] A* 알고리즘 알아보기 (0) | 2025.09.13 |
| [알고리즘 알아보기] AVL 트리 (0) | 2025.09.04 |