알고리즘은 무엇일까?
요리를 만들때 특정한 순서와 방법을 따라야 맛있는 요리를 만들 수 있는 것처럼, 프로그램으로 복잡한 문제를 해결하려면 명확한 절차와 규칙이 필요합니다.
알고리즘
은 문제를 해결하기 위한 단계적인 절차를 뜻하며, 요리의 레시피와 같습니다.
프로그래밍에서 알고리즘이 중요한 이유
알고리즘은 프로그램의 효율성
과 정확성
을 결정짓는 중요한 요소입니다.
어떤 문제를 해결하기 위해서는 다양한 방법들이 존재할 수 있습니다.
알고리즘의 핵심은 여러 가지 해결 방법 중에서 더 빠르고, 더 적은 자원을 사용하는 최적의 방법을 찾는 것입니다.
알고리즘의 종류와 간단한 코드 예제
알고리즘은 그 목적과 기능에 따라 다양한 종류로 나뉩니다.
이번 수업에서는 대표적인 알고리즘 몇 가지를 소개하고, 간단한 코드 예제를 살펴보겠습니다.
1. 검색(Search) 알고리즘
검색 알고리즘은 데이터에서 특정 값을 찾는 방법을 말합니다.
기본적인 예시로 선형 검색(Linear Search)
이 있습니다.
선형 검색 예시
def linear_search(arr, target):
# 리스트의 길이만큼 반복
for i in range(len(arr)):
# 타겟 값과 일치하는 경우
if arr[i] == target:
# 해당 인덱스 반환
return i
# 일치하는 값이 없는 경우 -1 반환
return -1
numbers = [3, 5, 2, 1, 10]
result = linear_search(numbers, 5)
print(result) # 5가 위치한 인덱스 1 출력
선형 검색 알고리즘은 리스트의 처음부터 끝까지 순차적으로 탐색하며, 타겟 값과 일치하는 값을 찾으면 해당 인덱스를 반환합니다.
2. 정렬(Sorting) 알고리즘
정렬 알고리즘은 데이터를 일정한 순서대로 정리하는 방법입니다.
기본적인 정렬 알고리즘으로 버블 정렬(Bubble Sort)
이 있습니다.
버블 정렬 예시
# 버블 정렬 함수
def bubble_sort(arr):
# 리스트의 길이
n = len(arr)
# 리스트 길이만큼 반복
for i in range(n):
# 리스트 길이에서 i만큼 뺀 범위까지 반복
for j in range(0, n-i-1):
# 현재 원소가 다음 원소보다 크면
if arr[j] > arr[j+1]:
# 두 원소의 위치 변경
arr[j], arr[j+1] = arr[j+1], arr[j]
# 정렬된 리스트 반환
return arr
# 정렬할 리스트
numbers = [64, 34, 25, 12, 22, 11, 90]
# 정렬된 리스트 출력
print(bubble_sort(numbers))
버블 정렬 알고리즘은 인접한 두 원소를 비교하여 정렬하는 방식으로, 리스트의 길이만큼 반복하면서 정렬을 수행합니다.
3. 재귀(Recursion) 알고리즘
재귀 알고리즘은 문제를 더 작은 문제로 쪼개어 해결하는 방법입니다.
대표적으로 피보나치 수열
을 계산하는 방법에 재귀 알고리즘을 사용합니다.
재귀 알고리즘 예시 - 피보나치 수열
def fibonacci(n):
# n이 1 이하인 경우
if n <= 1:
return n
# n이 2 이상인 경우
else:
# n-1번째와 n-2번째 피보나치 수열의 합 반환
return fibonacci(n-1) + fibonacci(n-2)
result = fibonacci(6)
print(result) # 8 출력
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!