알고리즘 실습: Python을 이용한 Linear Search 😎

발행: (2025년 12월 18일 오후 03:36 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

선형 탐색이란? 🤔

Linear search는 target이라고 부르는 값을 리스트(목록) 안에서 시작부터 끝까지 하나씩 요소를 검사하면서 찾는 방법입니다.

  • 찾으면 → 해당 위치(index)를 반환합니다.
  • 못 찾으면 → “없어요!” 라고 알려줍니다 (보통 -1을 반환).

장점: 매우 간단하고 리스트가 정렬돼 있을 필요가 없습니다.
단점: 리스트가 아주 길면 느립니다 (target이 마지막에 있거나 없을 경우 모든 요소를 검사해야 함).

선형 탐색 일러스트

위 그림은 선형 탐색이 어떻게 동작하는지 보여줍니다: 인덱스 0부터 시작해 하나씩 검사하면서 target을 찾습니다.

선형 탐색 작동 방식 단계별 📝

예시 리스트: [10, 20, 30, 40, 50] 와 target: 30

  1. 인덱스 0부터 시작: 10 == 30? 아니오.
  2. 인덱스 1: 20 == 30? 아니오.
  3. 인덱스 2: 30 == 30? 네! 인덱스 2에서 찾음.

target이 60인 경우: 끝까지 모두 검사 → 찾지 못함.

단계별 선형 탐색

이 그림은 탐정이 사라진 물건을 찾는 것처럼, 단계별로 자세히 보여줍니다! 🕵️‍♂️

파이썬 구현 🐍

우리는 linear_search라는 간단한 함수를 만들겠습니다.

def linear_search(arr, target):
    for i in range(len(arr)):          # Loop dari 0 sampai panjang list - 1
        if arr[i] == target:           # Kalau elemen ke‑i sama dengan target
            return i                   # Kembalikan index‑nya
    return -1                          # Kalau loop selesai berarti tidak ketemu

예제 1: 정수 리스트에서 숫자 찾기 👍

daftar_angka = [15, 7, 23, 42, 9, 31]
target = 23

hasil = linear_search(daftar_angka, target)
if hasil != -1:
    print(f"Ketemu! {target} ada di index {hasil}")
else:
    print(f"{target} nggak ada di list 😢")

Output: Ketemu! 23 ada di index 2

예제 2: 문자열 리스트(과일 이름)에서 문자 찾기

daftar_buah = ["Apel", "Pisang", "Jeruk", "Mangga", "Durian"]
target = "Mangga"

hasil = linear_search(daftar_buah, target)
if hasil != -1:
    print(f"Yummy! {target} ada di urutan ke-{hasil + 1} (index {hasil})")
else:
    print("Buahnya habis stok 😭")

Output: Yummy! Mangga ada di urutan ke-4 (index 3)

예제 3: 찾지 못함 (Return -1)

daftar_hewan = ["Kucing", "Anjing", "Kelinci", "Burung"]
target = "Singa"

hasil = linear_search(daftar_hewan, target)
if hasil != -1:
    print(f"Ketemu hewan {target}!")
else:
    print(f"{target} nggak ada di kebun binatang ini 🦁")

Output: Singa nggak ada di kebun binatang ini 🦁

예제 4: 빈 리스트 또는 처음/끝에 있는 타깃

# Target di awal
list1 = [100, 200, 300]
print(linear_search(list1, 100))   # Output: 0

# Target di akhir
print(linear_search(list1, 300))   # Output: 2

# List kosong
list_kosong = []
print(linear_search(list_kosong, 5))   # Output: -1

보너스: 이진 탐색과 비교 🔍

선형 탐색은 리스트가 작거나 정렬되지 않았을 때 적합합니다. 리스트가 이미 정렬돼 있다면, 이진 탐색이 더 빠릅니다 (마치 사전을 중간부터 펼치는 것처럼).

선형 vs 이진 탐색 비교

위 그림은 차이를 보여줍니다: 선형 탐색은 모든 요소를 검사하고, 이진 탐색은 절반씩 줄여가며 탐색합니다.

당신을 위한 연습! 💪

  • 코드를 수정해서 함수가 target이 몇 번 등장하는지 반환하도록 해보세요 (중복이 있을 경우).
  • 친구들의 이름 리스트에 선형 탐색을 적용하고, 자신의 이름을 찾아보세요.
  • 타이밍 테스트: 예를 들어 1000개의 요소가 있는 큰 리스트를 사용하고 time 모듈로 실행 시간을 측정해 보세요.

실습을 마치고 나면 선형 탐색을 이해한 것이며, 숙련된 프로그래머에 한 걸음 더 다가선 것입니다. 궁금한 점이 있으면 언제든 물어보세요 또는 직접 실험해 보세요. 즐거운 코딩 되세요! 🎉🐍

Back to Blog

관련 글

더 보기 »

Leetcode 39 조합 합

문제 설명: 서로 다른 정수들로 이루어진 배열 candidates와 정수 target이 주어지면, 선택된 숫자들의 합이 target이 되는 candidates의 모든 고유한 조합을 반환한다.