Menu
Coddy logo textTech

선형 탐색

마지막 업데이트

선형 탐색(순차 탐색이라고도 함)은 가장 단순한 탐색 알고리즘입니다. 첫 번째 요소에서 시작해 일치하는 값을 찾거나 요소가 다 떨어질 때까지 각 요소를 목표 값과 비교합니다. 데이터에 대해 아무런 가정도 하지 않습니다 — 배열은 정렬되어 있지 않아도 되고, 요소는 같은지 비교할 수 있는 것이라면 무엇이든 됩니다.

위 애니메이션은 탐색이 왼쪽에서 오른쪽으로 진행되는 동안 각 비교를 강조 표시하고, 목표 값이 나타나는 순간 멈춥니다. 단순함의 대가는 속도입니다. 최악의 경우 모든 요소를 확인해야 하므로 O(n) 시간에 동작합니다. 데이터가 정렬되어 있다면 이진 탐색이 같은 답을 O(log n)에 찾습니다 — 먼저 정렬된 데이터가 필요하다면 병합 정렬을 참고하세요.

시간 및 공간 복잡도

경우복잡도비고
최선의 경우O(1)첫 번째 요소가 목표 값인 경우.
평균적인 경우O(n)평균적으로 요소의 절반을 확인한 뒤 목표 값을 찾는다.
최악의 경우O(n)목표 값이 마지막에 있거나 — 아예 없는 경우.
공간O(1)현재 인덱스만 유지한다.

단계별 과정

단계무슨 일이 일어나는가
1배열의 첫 번째 요소인 인덱스 0에서 시작한다.
2현재 요소를 목표 값과 비교한다.
3같으면 현재 인덱스를 반환한다 — 발견.
4그렇지 않으면 한 칸 오른쪽으로 이동해서 반복한다.
5일치하는 값 없이 배열 끝에 도달하면 목표 값이 없는 것이다(-1 반환).

풀이 예제

[7, 3, 9, 1, 5, 8, 2]에서 5를 탐색하는 경우:

비교인덱스요소결과
1077 ≠ 5 — 계속 탐색.
2133 ≠ 5 — 계속 탐색.
3299 ≠ 5 — 계속 탐색.
4311 ≠ 5 — 계속 탐색.
5455 = 5 — 인덱스 4에서 발견.

선형 탐색을 사용해야 할 때

사용해야 할 때피해야 할 때
데이터가 정렬되어 있지 않거나 끊임없이 변할 때데이터가 정렬되어 있을 때 — 이진 탐색이 지수적으로 더 빠르다
컬렉션이 작아서 단순함이 이길 때데이터셋이 크고 반복적으로 탐색될 때
순차 접근만 가능할 때(스트림, 연결 리스트)O(1) 조회를 위한 인덱스나 해시 테이블을 마련할 수 있을 때

Linear Search 코드

Python, JavaScript, Java, C++, C, Pseudocode로 작성된 깔끔하고 실행 가능한 Linear Search 구현입니다. 언어를 선택해 코드를 복사하거나 Coddy 플레이그라운드에서 바로 열어보세요.

Python로 구현한 Linear Search 코드

Python
1def linear_search(a, target):2    # Scan left to right until the target appears3    for i in range(len(a)):4        if a[i] == target:5            return i6    return -17
8
9nums = [7, 3, 9, 1, 5, 8, 2]10print("Index of 5:", linear_search(nums, 5))11print("Index of 4:", linear_search(nums, 4))
이 코드를 Python 플레이그라운드에서 실행하기

선형 탐색 FAQ

선형 탐색의 시간 복잡도는 어떻게 되나요?
평균과 최악의 경우 O(n)입니다 — 탐색이 모든 요소를 방문해야 할 수도 있기 때문입니다. 첫 번째 요소가 목표 값인 최선의 경우는 O(1)입니다. 추가 공간은 O(1)을 사용합니다.
선형 탐색에는 정렬된 데이터가 필요한가요?
아니요 — 그것이 가장 큰 장점입니다. 선형 탐색은 각 요소가 같은지 확인하기 때문에 완전히 정렬되지 않은 데이터에서도 동작합니다. 순서는 전혀 중요하지 않습니다. 반면 이진 탐색은 정렬된 배열에서만 동작합니다.
선형 탐색이 이진 탐색보다 나은 경우는 언제인가요?
데이터가 정렬되어 있지 않고 한 번만 탐색할 때(먼저 정렬하면 O(n log n)이 듭니다), 컬렉션이 아주 작을 때, 또는 스트림이나 연결 리스트처럼 순차 접근만 가능할 때입니다. 정렬된 배열에서 반복 조회한다면 이진 탐색이 이깁니다.
선형 탐색과 순차 탐색은 같은 건가요?
네 — 두 이름은 같은 알고리즘을 설명합니다. 목표 값을 찾거나 컬렉션이 끝날 때까지 요소를 순서대로 훑는 것입니다.
선형 탐색은 평균적으로 몇 번 비교하나요?
목표 값이 존재하고 어느 위치에나 있을 확률이 같다면 평균 약 n/2번 비교합니다. 목표 값이 없으면 정확히 n번입니다. 이 선형적 증가가 선형 탐색이라는 이름의 유래입니다.
Coddy programming languages illustration

Coddy로 알고리즘을 마스터하세요

시작하기