본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
알고리즘
알고리즘이란?
알고리즘
- 어떤 문제를 해결하거나 계산 시 수행되는 명확한 명령문의 나열
- '초기값'이 주어지고, 유한한 시행횟수를 거쳐 '출력'을 생성한 다음 종료
알고리즘의 특징
- 입력과 출력
- 입력값을 받고, 결과를 출력
- 입력 데이터에 성능 비례 - 유한성
- 유한한 단계로 실행됨
- 무한루프에 빠져선 안됨 - 정확성
- 입력값에 대한 정확한 결과
- 원하는 목표의 달성 - 효율성
- 가능한 빠르고, 공간 효율적
알고리즘을 공부해야 하는 이유
- 문제 해결 능력
- 효율적인 프로그래밍
- 문제 예측과 예방
- 프로그래밍 언어 이해
- 면접과 채용
알고리즘의 성능 : 복잡도
시간 복잡도
- 특정 알고리즘이 실행되는 데에 필요한 연산 시간의 총량
- big-O 표기법으로 표현 됨(최악의 경우로 측정)
- n은 입력의 크기
공간 복잡도
- 알고리즘, 프로그램을 수행하는데 필요한 메모리 공간의 총량
복잡도 - O(n)
- 입력 크기에 비례하여 선형적으로 시간/공간 복잡도가 증가
- 최악의 경우, 입력된 데이터를 모두 순회해야 함
- 일반적인 배열에서 데이터 찾기
- 동일한 배열 복사하기
#O(n) 시간 복잡도의 알고리즘 예시 : 리스트의 모든 요소 출력
def print_list_elements(lst):
for element in lst:
print(element, end=" ")
print()
복잡도 - O( n² )
- 입력 크기의 제곱에 비례하여 시간/공간 복잡도가 증가
- 데이터셋이 커질수록 불리해짐
- 중첩된 반복문을 사용하여 정렬하는 경우
#이차원 배열 표현
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
#O(n^2) 시간 복잡도의 알고리즘 예시 : 모든 원소 출력
def print_matrix_elements(matrix):
for row in matrix:
for element in row:
print(element, end=" ")
print()
복잡도 - O(logn)
- 입력 크기에 따라 로그 형태로 시간/공간 복잡도가 증가
- 큰 데이터셋에서 빠른 처리가 필요한 경우 선호됨
- 이진 트리 검색 등
def binary_search(arr, target):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
mid_value = arr[mid]
if mid_value == target:
return mid #찾은 경우 해당 인덱스 반환
elif mid_value < target:
low = mid + 1 #중간 값이 목표보다 작으면 오른쪽 반으로 탐색
else:
high = mid - 1 #중간 값이 목표보다 크면 왼쪽 반으로 탐색
return -1 #목표값이 배열에 없는 경우
알고리즘의 시간 복잡도와 공간 복잡도 내용은 이전에도 정리했는데, Python 기본 강의에서 한번 더 정리할 기회가 생겼네요. 다시 정리해볼게요!!
알고리즘의 시간 복잡도와 공간 복잡도를 배우다 보면, 처음에는 단순히 '얼마나 빠른가'를 측정하는 지표로만 느껴졌어요. 하지만 실제로 프로그램을 작성하다보면 이 개념들이 단순히 성능 지표만을 의미하는 것이 아니라, 프로그램 설계의 방향성 자체를 결정하는 중요한 기준이 된다는걸 깨달을 수 있죠. 특히 데이터의 크기가 작을 때는 어떤 알고리즘을 사용하든 큰 차이가 없어 보여요. 100개의 데이터를 정리할 때 O(n)과 O(n²)의 차이는 체감하기 어렵죠. 하지만 데이터가 10,000개, 100,000개로 늘어나면 상황이 완전이 달라집니다. O(n) 알고리즘은 선형적으로 증가하지만, O(n²) 알고리즘은 기하급수적으로 느려지거든요.
이런 복잡도 개념이 RAG 시스템과 어떻게 연결될지 알아봤는데, 아주 필요한 개념이더라고요. RAG는 수천, 수만 개의 청크(Chunk) 단위로 분할된 문서에서 질문과 가장 관련도가 높은 정보를 빠르게 찾아내야 하죠. 만약 O(n²) 복잡도의 검색 알고리즘을 사용한다면, 실시간 응답은 힘들다고 할 수 있죠. 그래서 벡터 데이터베이스는 O(log n)에 가까운, 근사 최근접 이웃 탐색(ANN) 알고리즘을 사용한다고 합니다.
결국 좋은 알고리즘을 선택한다는 것은 단순히 빠른 코드를 작성하는 것이 아니라, 확장 가능한 시스템을 설계하는 것이라 이해했어요. 사용자가 10명일 때는 문제없던 시스템이 1000명, 10,000명이 되었을 때에도 안정적으로 작동할 수 있도록 미리 설계하는거죠.
이제 이 챌린지의 끝이 보이네요. 내일이면 마지막이에요. 25년의 끝이자, 챌린지의 끝. 이렇게 또 1년이 지나가네요. 다들 고생 많으셨어요. 올해를 끝으로 취준 생활도 끝맺음 하고싶어요!! 2026년에는 취뽀를 기원하며...




커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
'RAG' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 50일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.31 |
|---|---|
| 패스트캠퍼스 환급챌린지 48일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.29 |
| 패스트캠퍼스 환급챌린지 47일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.28 |
| 패스트캠퍼스 환급챌린지 46일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.27 |
| 패스트캠퍼스 환급챌린지 45일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.26 |