반응형
컴퓨터공학과 자료구조/알고리즘 중간·기말고사나 C언어 실기 시험에서 "원하는 데이터를 찾는 탐색(Search) 알고리즘"에 대해 물어볼 때 가장 먼저 등장하는 기본 개념이 있습니다. 바로 순차 탐색(Linear Search)과 이진 탐색(Binary Search)입니다.
"단순히 처음부터 찾으면 되는 거 아닌가?"
"왜 이진 탐색을 사용하기 전에는 반드시 '정렬'이 되어 있어야 할까?"
두 알고리즘의 동작 원리부터 시간 복잡도, C언어 구현 코드, 그리고 시험 단골 문제 유형까지 완벽하게 정리해 드립니다!
1. 순차 탐색(Linear Search)이란?
순차 탐색(선형 탐색)은 리스트의 첫 번째 데이터부터 마지막 데이터까지 순서대로 하나씩 비교해가며 원하는 값을 찾는 가장 직관적이고 단순한 알고리즘입니다.
🔹 특징 및 동작 방식
- 전제 조건 없음: 데이터가 정렬되어 있든 않든 상관없이 바로 사용할 수 있습니다.
- 작동 원리: Index 0부터 시작하여 찾고자 하는 값(Target)과 같은지 비교하고, 같으면 종료, 다르면 다음 인덱스로 이동합니다.
- 시간 복잡도:
- 최선의 경우 (Best): $O(1)$ (첫 번째에 바로 찾을 때)
- 최악의 경우 (Worst): $O(N)$ (맨 마지막에 있거나 데이터가 없을 때)
2. 이진 탐색(Binary Search)이란?
이진 탐색(이분 탐색)은 "정렬된 배열"에서 찾고자 하는 값과 중앙값(Mid)을 비교하여 탐색 범위를 반씩 줄여가며 데이터를 찾는 고속 탐색 알고리즘입니다.
⚠️ 시험 필수 강조 포인트!
이진 탐색을 수행하기 위한 대전제 조건은 **"배열 내의 데이터가 반드시 미리 정렬(Sorted)되어 있어야 한다"**는 점입니다. 정렬되어 있지 않다면 이진 탐색을 사용할 수 없습니다.
🔹 이진 탐색의 동작 단계
- 배열의 시작 인덱스(low)와 끝 인덱스(high)를 바탕으로 중간 인덱스(mid = (low + high) / 2)를 계산합니다.
- mid 위치의 값과 찾고자 하는 target 값을 비교합니다.
- arr[mid] == target: 탐색 성공!
- arr[mid] > target: 찾을 값이 중앙값보다 작으므로 오른쪽 영역을 제외 (high = mid - 1)
- arr[mid] < target: 찾을 값이 중앙값보다 크므로 왼쪽 영역을 제외 (low = mid + 1)
- low > high가 될 때까지 1~2 과정을 반복합니다.
3. 한눈에 비교하는 핵심 차이점 (시험 서술형 단골)
| 구분 | 순차 탐색 (Linear Search) | 이진 탐색 (Binary Search) |
| 선행 조건 | 정렬 불필요 (무작위 데이터 가능) | 반드시 정렬되어 있어야 함 |
| 탐색 방식 | 처음부터 끝까지 순차적으로 비교 | 탐색 범위를 반($1/2$)씩 분할하며 비교 |
| 평균 시간 복잡도 | $O(N)$ | $O(\log N)$ |
| 최악 시간 복잡도 | $O(N)$ | $O(\log N)$ |
| 적합한 상황 | 데이터 양이 적거나 정렬되지 않은 경우 | 대용량 정렬 데이터를 빠르게 찾을 때 |
4. C언어 구현 코드 비교
시험에서 손코딩(서술형)으로 자주 나오는 핵심 C언어 구현 예시입니다.
💻 순차 탐색 C언어 코드
C
int linearSearch(int arr[], int size, int target) {
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
return i; // 찾았을 때 인덱스 반환
}
}
return -1; // 찾지 못했을 때
}
💻 이진 탐색 C언어 코드 (반복문 방식)
C
int binarySearch(int arr[], int size, int target) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = low + (high - low) / 2; // 오버플로우 방지용 계산
if (arr[mid] == target) {
return mid; // 찾았을 때 인덱스 반환
} else if (arr[mid] > target) {
high = mid - 1; // 왼쪽 반으로 범위를 줄임
} else {
low = mid + 1; // 오른쪽 반으로 범위를 줄임
}
}
return -1; // 찾지 못했을 때
}
5. 시험 단골 출제 유형 체크
- Q. 데이터가 $1,000,000$개(100만 개) 정렬되어 있을 때, 이진 탐색의 최악 비교 횟수는 약 몇 회인가?
- 👉 $\log_2(1,000,000) \approx 20$이므로 약 20회 만에 원하는 데이터를 찾을 수 있습니다. ($O(N)$인 순차 탐색은 최악의 경우 100만 번 비교)
- Q. 이진 탐색을 적용하기 위해 배열에 반드시 선행되어야 하는 작업은?
- 👉 데이터의 정렬(Sorting) 작업입니다.
- Q. 무작위로 섞여 있는 10개의 데이터에서 특정 값을 찾을 때 더 효율적인 알고리즘은?
- 👉 데이터 양이 매우 적고 정렬되어 있지 않으므로 순차 탐색이 정렬 비용을 고려했을 때 더 효율적입니다.
반응형
'전공과목 > 알고리즘' 카테고리의 다른 글
| [알고리즘 심층분석 #3] 삽입 정렬(Insertion Sort) 동작 원리, O(N) 유도, 코드 구현 완벽 정리 (0) | 2026.08.20 |
|---|---|
| [알고리즘 심층분석 #2] 선택 정렬(Selection Sort) 동작 원리, 시간 복잡도, 불안정 정렬 특성 완벽 정리 (0) | 2026.08.20 |
| [알고리즘 심층분석 #1] 버블 정렬(Bubble Sort) 동작 원리, 시간 복잡도, 최적화 완벽 정리 (0) | 2026.08.20 |
| [자료구조/알고리즘] 주요 정렬 알고리즘 5종 동작 원리 및 시간·공간 복잡도 완전 정리 (0) | 2026.08.19 |
| [알고리즘/C언어] 기초 정렬 알고리즘 3종 (버블, 선택, 삽입 정렬) 개념 및 차이점 완전 정리 (시험 단골 주제) (0) | 2026.08.13 |