순차 검색 알고리즘
순차 검색(선형 탐색) 알고리즘은 컴퓨터 과학에서 가장 기본적인 검색 알고리즘 중 하나입니다. 이 알고리즘은 배열이나 리스트와 같은 데이터 구조에 저장된 데이터를 처음부터 끝까지 차례대로 검색하여 원하는 값을 찾는 방법입니다. 선형 탐색 알고리즘은 구현이 간단하고 추가적인 자료 구조나 알고리즘 지식이 필요하지 않은 장점이 있습니다.
그러나 선형 탐색 알고리즘의 단점은 원하는 값을 찾기 위해 최악의 경우 전체 데이터를 검색해야 하므로, 검색 대상이 많은 경우에는 비효율적일 수 있습니다. 이에 따라 데이터가 정렬되어 있는 경우 이진 검색 알고리즘과 같은 더 효율적인 검색 알고리즘을 사용할 수 있지만, 데이터가 정렬되어 있지 않은 경우에는 선형 탐색이 여전히 유용한 방법입니다.
예제: 선형 탐색 알고리즘
코드: LinearSearch.cs
using System;
namespace LinearSearch
{
class Program
{
static void Main(string[] args)
{
const int SIZE = 5;
int[] arr = new int[SIZE];
int key, index = -1;
Console.WriteLine("5개의 정수를 입력하세요:");
for (int i = 0; i < SIZE; i++)
{
arr[i] = int.Parse(Console.ReadLine());
}
Console.Write("찾을 숫자를 입력하세요: ");
key = int.Parse(Console.ReadLine());
for (int i = 0; i < SIZE; i++)
{
if (arr[i] == key)
{
index = i;
break;
}
}
if (index != -1)
{
Console.WriteLine("찾은 숫자 {0}의 인덱스: {1}", key, index);
}
else
{
Console.WriteLine("찾지 못했습니다.");
}
}
}
}
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: linear_search.c
#define _CRT_SECURE_NO_WARNINGS // Visual Studio에서 보안 경고를 무시하도록 설정
#include <stdio.h>
#define SIZE 5
int main(void)
{
int arr[SIZE], key, index = -1; // 배열, 키, 인덱스 초기화
// 사용자로부터 5개의 정수를 입력받아 배열에 저장
printf("5개의 정수를 입력하세요:\n");
for (int i = 0; i < SIZE; i++)
{
scanf("%d", &arr[i]);
}
// 사용자로부터 찾을 정수(키)를 입력받음
printf("찾을 숫자를 입력하세요: ");
scanf("%d", &key);
// 선형 검색 알고리즘을 사용하여 키와 일치하는 원소를 찾음
for (int i = 0; i < SIZE; i++)
{
if (arr[i] == key)
{
index = i; // 키가 일치하는 원소의 인덱스를 저장
break; // 더 이상 검색할 필요가 없으므로 반복문을 종료
}
}
// 찾은 원소의 인덱스를 출력하거나, 원소를 찾지 못했음을 알림
if (index != -1)
{
printf("찾은 숫자 %d의 인덱스: %d\n", key, index);
}
else
{
printf("찾지 못했습니다.\n");
}
return 0;
}
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: LinearSearch.java
import java.util.Scanner;
public class LinearSearch {
public static void main(String[] args) {
final int SIZE = 5;
int[] arr = new int[SIZE];
int key, index = -1;
Scanner scanner = new Scanner(System.in);
System.out.println("5개의 정수를 입력하세요:");
for (int i = 0; i < SIZE; i++) {
arr[i] = scanner.nextInt();
}
System.out.print("찾을 숫자를 입력하세요: ");
key = scanner.nextInt();
for (int i = 0; i < SIZE; i++) {
if (arr[i] == key) {
index = i;
break;
}
}
if (index != -1) {
System.out.printf("찾은 숫자 %d의 인덱스: %d%n", key, index);
} else {
System.out.println("찾지 못했습니다.");
}
scanner.close();
}
}
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: linear_search.py
def main():
SIZE = 5
arr = [0] * SIZE
index = -1
print("5개의 정수를 입력하세요:")
for i in range(SIZE):
arr[i] = int(input())
key = int(input("찾을 숫자를 입력하세요: "))
for i in range(SIZE):
if arr[i] == key:
index = i
break
if index != -1:
print(f"찾은 숫자 {key}의 인덱스: {index}")
else:
print("찾지 못했습니다.")
if __name__ == "__main__":
main()
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: linear_search.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Linear Search</title>
</head>
<body>
<h3>5개의 정수를 입력하세요:</h3>
<input type="number" id="num1">
<input type="number" id="num2">
<input type="number" id="num3">
<input type="number" id="num4">
<input type="number" id="num5">
<h3>찾을 숫자를 입력하세요:</h3>
<input type="number" id="key">
<button onclick="linearSearch()">검색</button>
<p id="result"></p>
<script>
function linearSearch() {
const SIZE = 5;
let arr = [];
let key = parseInt(document.getElementById("key").value);
let index = -1;
for (let i = 1; i <= SIZE; i++) {
let id = "num" + i;
arr.push(parseInt(document.getElementById(id).value));
}
for (let i = 0; i < SIZE; i++) {
if (arr[i] === key) {
index = i;
break;
}
}
let result = document.getElementById("result");
if (index !== -1) {
result.innerHTML = "찾은 숫자 " + key + "의 인덱스: " + index;
} else {
result.innerHTML = "찾지 못했습니다.";
}
}
</script>
</body>
</html>
*출력 예시:*
브라우저에서 linear_search.html 파일을 열고, 입력값을 입력한 후 "검색" 버튼을 클릭하면 결과가 출력됩니다.
예제: 선형 탐색 알고리즘
코드: linear_search.cpp
#include <iostream>
using namespace std;
int main() {
const int SIZE = 5;
int arr[SIZE];
int key, index = -1;
cout << "5개의 정수를 입력하세요:" << endl;
for (int i = 0; i < SIZE; i++) {
cin >> arr[i];
}
cout << "찾을 숫자를 입력하세요: ";
cin >> key;
for (int i = 0; i < SIZE; i++) {
if (arr[i] == key) {
index = i;
break;
}
}
if (index != -1) {
cout << "찾은 숫자 " << key << "의 인덱스: " << index << endl;
} else {
cout << "찾지 못했습니다." << endl;
}
return 0;
}
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: linear_search.go
package main
import "fmt"
func main() {
const SIZE = 5
var arr [SIZE]int
var key, index int
index = -1
fmt.Println("5개의 정수를 입력하세요:")
for i := 0; i < SIZE; i++ {
fmt.Scan(&arr[i])
}
fmt.Print("찾을 숫자를 입력하세요: ")
fmt.Scan(&key)
for i := 0; i < SIZE; i++ {
if arr[i] == key {
index = i
break
}
}
if index != -1 {
fmt.Printf("찾은 숫자 %d의 인덱스: %d\n", key, index)
} else {
fmt.Println("찾지 못했습니다.")
}
}
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: linear_search.rs
use std::io;
fn main() {
const SIZE: usize = 5;
let mut arr = [0; SIZE];
let mut key = 0;
let mut index = -1;
println!("5개의 정수를 입력하세요:");
for i in 0..SIZE {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
arr[i] = input.trim().parse().expect("Please type a number");
}
println!("찾을 숫자를 입력하세요: ");
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
key = input.trim().parse().expect("Please type a number");
for i in 0..SIZE {
if arr[i] == key {
index = i as i32;
break;
}
}
if index != -1 {
println!("찾은 숫자 {}의 인덱스: {}", key, index);
} else {
println!("찾지 못했습니다.");
}
}
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4
예제: 선형 탐색 알고리즘
코드: linear_search.ts
function linearSearch(arr: number[], key: number): number {
const SIZE = arr.length;
let index = -1;
for (let i = 0; i < SIZE; i++) {
if (arr[i] === key) {
index = i;
break;
}
}
return index;
}
console.log(linearSearch([1, 2, 3, 4, 5], 5)); // Output: 4
예제: 선형 탐색 알고리즘
코드: linear_search.kt
fun main() {
val SIZE = 5
val arr = IntArray(SIZE)
var key: Int
var index = -1
println("5개의 정수를 입력하세요:")
for (i in 0 until SIZE) {
arr[i] = readLine()!!.toInt()
}
println("찾을 숫자를 입력하세요: ")
key = readLine()!!.toInt()
for (i in 0 until SIZE) {
if (arr[i] == key) {
index = i
break
}
}
if (index != -1) {
println("찾은 숫자 $key의 인덱스: $index")
} else {
println("찾지 못했습니다.")
}
}
*출력 예시:*
5개의 정수를 입력하세요:
1
2
3
4
5
찾을 숫자를 입력하세요: 5
찾은 숫자 5의 인덱스: 4