728x90
반응형

알고리즘기초 22

덱(Deque, Double-Ended Queue)

개요덱(Deque, Double-Ended Queue)은 양쪽 끝(front, rear) 모두에서 삽입과 삭제가 가능한 선형 자료구조이다. 일반 큐는 FIFO, 스택은 LIFO 원칙만 따르지만, 덱은 스택과 큐의 기능을 모두 갖춘 유연한 자료구조로, 양방향에서 데이터를 처리할 수 있다. 파이썬에서는 collections.deque 모듈을 통해 효율적인 덱을 구현할 수 있다.1. 개념 및 정의 구성 요소 설명 front덱의 앞쪽 끝, 요소 삽입/삭제 가능rear덱의 뒤쪽 끝, 요소 삽입/삭제 가능연산append, appendleft, pop, popleft, peek덱은 입력 제한 덱(Input-Restricted Deque), 출력 제한 덱(Output-Restricted Deque) 등으로 확장 가능..

Topic 2025.03.29

스택(Stack)

개요스택(Stack)은 데이터가 일렬로 쌓이고, 가장 마지막에 삽입된 요소가 가장 먼저 제거되는 후입선출(Last-In, First-Out, LIFO) 원칙을 따르는 선형 자료구조이다. 삽입은 push, 삭제는 pop, 현재 요소 확인은 peek 또는 top 연산으로 수행되며, 재귀, 수식 계산, 괄호 검사, 웹 브라우저의 방문 기록 등 다양한 분야에서 널리 활용된다.1. 개념 및 정의 항목 설명 구조선형적, 한쪽 끝에서만 삽입 및 삭제 가능주요 연산push(삽입), pop(삭제), peek/top(최상단 확인), isEmpty대표 원리LIFO (Last-In, First-Out)2. 스택 연산 동작 예시초기: []push(10) → [10]push(20) → [10, 20]pop() → [10] (2..

Topic 2025.03.29

Linked List(연결 리스트)

개요연결 리스트(Linked List)는 각 노드가 데이터와 다음 노드를 가리키는 포인터를 함께 저장하여 데이터를 선형으로 연결한 자료구조이다. 배열과 달리 메모리 상에서 연속적이지 않아도 되며, 삽입/삭제 연산이 유연하다는 장점이 있다. 리스트의 형태에 따라 단일(Singly), 이중(Doubly), 원형(Circular) 등으로 구분되며, 알고리즘과 시스템 구현에서 핵심적으로 활용된다.1. 개념 및 정의 구성 요소 설명 Node데이터(data) + 포인터(next)로 구성된 기본 단위Head연결 리스트의 시작 노드를 가리키는 포인터Tail마지막 노드를 의미하며, next는 None 또는 Head를 가리킴노드는 동적으로 생성되며, 메모리를 필요할 때마다 할당한다.2. 배열과의 차이점 비교항목배열(Ar..

Topic 2025.03.29

배열(Array)

개요배열(Array)은 같은 타입의 데이터를 메모리상에 연속적으로 저장하는 자료구조로, 프로그래밍에서 가장 기본적이면서도 핵심적인 구조 중 하나다. 인덱스를 기반으로 요소에 빠르게 접근할 수 있으며, 리스트, 행렬, 문자열 등 다양한 형태로 확장되어 활용된다. 정렬, 탐색, 해싱, 동적 프로그래밍 등 거의 모든 알고리즘에서 필수적으로 사용된다.1. 개념 및 정의 항목 설명 정의같은 데이터 타입을 가지는 원소들이 메모리상에 연속적으로 배치된 구조인덱스0부터 시작하는 정수로, 각 원소에 접근하는 주소 역할특징빠른 접근 속도 (인덱스 기반), 고정된 크기 (정적 배열 기준)2. 배열의 특징항목설명시간 복잡도 (접근)O(1) (arr[i]로 바로 접근 가능)시간 복잡도 (삽입/삭제)O(n) (중간에 삽입/삭제..

Topic 2025.03.29

동적 계획법(Dynamic Programming, DP)

개요동적 계획법(Dynamic Programming, DP)은 복잡한 문제를 여러 개의 중복된 하위 문제로 나누고, 이들을 한 번만 계산하여 결과를 저장해 재사용함으로써 전체 문제를 효율적으로 해결하는 알고리즘 설계 전략이다. 피보나치 수열, 최장 공통 부분 수열(LCS), 배낭 문제(Knapsack), 경로 탐색 등 다양한 최적화 문제에 활용되며, **탑다운(메모이제이션)**과 바텀업(테이블화) 방식이 있다.1. 핵심 개념 및 정의동적 계획법의 핵심은 다음 두 가지 조건을 만족하는 문제에서 적용 가능하다:중복 부분 문제(Overlapping Subproblems): 동일한 하위 문제가 반복적으로 등장함최적 부분 구조(Optimal Substructure): 전체 문제의 최적해가 하위 문제의 최적해로 구..

Topic 2025.03.29

백트래킹(Backtracking) 알고리즘

개요백트래킹(Backtracking)은 가능한 모든 경우의 수를 탐색하되, 불가능하거나 의미 없는 경로는 조기에 차단(pruning)하는 완전 탐색 기법이다. DFS(깊이 우선 탐색)를 기반으로 하며, 부분 해(partial solution)를 점진적으로 구성해가다가 해답이 아니라고 판단되면 직전 상태로 되돌아가 다른 경로를 탐색한다. 퍼즐, 조합, 순열, 경로 탐색 등 다양한 문제에 사용된다.1. 개념 및 정의완전 탐색(Brute Force): 가능한 모든 경우를 시도백트래킹: 모든 경우를 시도하되, 유망하지 않은 경로는 가지치기(prune)재귀 호출 + 조건 기반 되돌아가기 형태로 구현됨2. 동작 구조 단계 설명 1현재 노드(상태)가 해답인지 확인2해답이면 출력 또는 저장3아니라면 다음 가능한 선택..

Topic 2025.03.29

분할 정복(Divide and Conquer)

개요분할 정복(Divide and Conquer)은 큰 문제를 작고 동일한 구조의 하위 문제로 나눈 뒤, 이를 각각 해결하고 결합하여 전체 문제를 해결하는 알고리즘 전략이다. 컴퓨터 과학에서 가장 널리 사용되는 알고리즘 설계 패러다임 중 하나로, 정렬, 탐색, 수학 계산, 동적 프로그래밍 등 다양한 분야에 활용된다. 병렬 처리와 최적화 문제에도 효과적이다.1. 개념 및 정의분할 정복은 다음과 같은 3단계로 구성된다:Divide (분할): 문제를 동일한 구조의 더 작은 하위 문제로 나눈다.Conquer (정복): 각 하위 문제를 재귀적으로 해결한다.Combine (결합): 하위 문제의 해를 결합하여 원래 문제의 해를 도출한다.2. 대표 알고리즘 예시 알고리즘 설명 시간 복잡도 병합 정렬 (Merge S..

Topic 2025.03.29

트리 탐색(Tree Traversal) 알고리즘

개요트리 탐색(Tree Traversal)은 트리 구조를 가진 자료구조의 노드를 특정 순서에 따라 방문하는 알고리즘이다. 이진 트리(Binary Tree), 이진 탐색 트리(BST), 힙(Heap) 등 다양한 트리 구조에서 데이터를 순차적으로 접근하거나 연산을 수행할 때 사용된다. DFS 기반의 전위/중위/후위 순회와 BFS 기반의 레벨 순회로 나뉘며, 문제에 따라 적절한 탐색 방법을 선택해야 한다.1. 개념 및 정의트리 탐색은 다음과 같은 두 가지 유형으로 나뉜다:DFS(Depth-First Search): 깊이 우선 순회 (전위, 중위, 후위 순회)BFS(Breadth-First Search): 너비 우선 순회 (레벨 순회)2. DFS 기반 트리 순회 순회 방식 방문 순서 주요 특징 전위 순회 (..

Topic 2025.03.29

해시 탐색(Hash Search) 알고리즘

개요해시 탐색(Hash Search)은 키(key)를 해시 함수(hash function)를 통해 해시 테이블의 인덱스로 변환한 뒤, 해당 위치에서 값을 직접 찾아내는 탐색 알고리즘이다. 평균적으로 **O(1)**의 시간 복잡도를 제공하며, 가장 빠른 검색 기법 중 하나로 꼽힌다. 해시맵(HashMap), 딕셔너리(Dictionary), 셋(Set) 등 현대 프로그래밍 언어의 기본 자료구조에서도 사용된다.1. 개념 및 정의해시 탐색은 다음 과정을 거쳐 값을 찾는다:**입력 키(key)**를 해시 함수에 입력하여 해시 값(index)을 얻는다.해당 인덱스에 접근하여 값을 확인한다.해시 충돌이 발생할 경우에는 충돌 해결 기법(체이닝, 개방 주소법 등)을 통해 탐색을 이어간다.2. 해시 함수와 해시 테이블 구..

Topic 2025.03.29

이진 탐색(Binary Search) 알고리즘

개요이진 탐색(Binary Search)은 정렬된 데이터에서 중간 값을 기준으로 절반씩 범위를 줄여가며 값을 찾는 탐색 알고리즘이다. 선형 탐색보다 훨씬 빠른 **O(log n)**의 시간 복잡도를 가지며, 배열이나 리스트에서 특정 값을 빠르게 찾아야 할 때 가장 널리 쓰이는 탐색 방식 중 하나다.1. 개념 및 정의이진 탐색은 다음과 같은 절차로 작동한다:데이터가 반드시 오름차순 또는 내림차순으로 정렬되어 있어야 한다.시작점(left)과 끝점(right)을 설정하고, 중간값(mid)을 계산한다.mid 위치의 값과 찾는 값을 비교한다.일치 → 탐색 성공더 작음 → right = mid - 1더 큼 → left = mid + 1범위가 좁아질 때까지 반복한다.2. 동작 원리 단계 설명 1시작 인덱스와 끝 인..

Topic 2025.03.29

기수 정렬(Radix Sort) 알고리즘

개요기수 정렬(Radix Sort)은 정수형 데이터를 자릿수별로 분류하여 정렬하는 방식의 비교 기반이 아닌(non-comparative) 정렬 알고리즘이다. LSD(Least Significant Digit) 방식에서는 가장 낮은 자리부터 정렬하고, MSD(Most Significant Digit)는 가장 높은 자리부터 정렬한다. **시간 복잡도는 O(nk)**로 매우 효율적이며, 계수 정렬 또는 안정 정렬을 내부적으로 활용한다.1. 개념 및 정의기수 정렬은 숫자의 각 자릿수를 기준으로 여러 번의 정렬을 반복하여 전체 배열을 정렬하는 알고리즘이다. 각 자릿수마다 안정 정렬을 수행해야 정확한 결과를 보장할 수 있다.예를 들어 [170, 45, 75, 90, 802, 24, 2, 66]를 정렬할 경우:1의 ..

Topic 2025.03.29

계수 정렬(Counting Sort) 알고리즘

개요계수 정렬(Counting Sort)은 정수 데이터가 주어진 범위 내에 존재할 때, 매우 빠르게 정렬할 수 있는 비교 기반이 아닌 정렬 알고리즘이다. 데이터의 빈도수를 카운트 배열에 저장하고, 이를 기반으로 정렬된 결과를 생성하는 방식으로, 평균 시간 복잡도 **O(n + k)**의 매우 빠른 성능을 제공한다. 단, 정수 범위가 제한적일 때만 효율적이다.1. 개념 및 정의계수 정렬은 다음 절차로 이루어진다:입력 배열에서 최댓값(K)을 기준으로 길이 K+1짜리 카운트 배열 생성각 원소의 빈도수를 카운트 배열에 저장카운트 배열을 누적합으로 변경 (누적합 정렬 시 사용)누적합을 기반으로 정렬된 결과 배열에 삽입음수 데이터에는 직접 사용할 수 없고, 변환이 필요하다.2. 동작 원리 단계 설명 1입력 배열에..

Topic 2025.03.29

힙 정렬(Heap Sort) 알고리즘

개요힙 정렬(Heap Sort)은 힙(Heap) 자료구조를 기반으로 하는 비교 기반 정렬 알고리즘이다. 최대 힙(Max Heap) 또는 최소 힙(Min Heap)을 이용해 최댓값(또는 최솟값)을 반복적으로 추출하고, 이를 배열의 끝에 삽입하는 방식으로 동작한다. **시간 복잡도가 항상 O(n log n)**으로 일정하며, **제자리 정렬(in-place)**이 가능하다는 장점이 있다.1. 개념 및 정의힙 정렬은 다음 두 단계로 이루어진다:배열을 힙 구조(완전 이진 트리)로 구성 (heapify)루트 노드(최댓값 또는 최솟값)를 추출한 뒤, 남은 요소로 힙 재구성 → 정렬 반복일반적으로 최대 힙을 사용해 오름차순 정렬을 수행한다.2. 동작 원리 단계 설명 1단계입력 배열을 최대 힙 구조로 변환2단계힙의 ..

Topic 2025.03.29

병합 정렬(Merge Sort) 알고리즘

개요병합 정렬(Merge Sort)은 데이터를 반으로 나누고 각각을 정렬한 뒤 다시 병합하는 분할 정복(Divide and Conquer) 전략을 사용하는 효율적인 정렬 알고리즘이다. 안정 정렬이며, 항상 **O(n log n)**의 시간 복잡도를 유지해 정렬 알고리즘 중에서도 높은 성능과 예측 가능성을 보인다. 내부 정렬과 외부 정렬(External Sort) 모두에 활용되며, 대용량 데이터 정렬에도 적합하다.1. 개념 및 정의병합 정렬은 다음 과정을 반복하여 배열을 정렬한다:배열을 반으로 나눈다 (재귀적으로)각각을 병합 정렬로 정렬한다정렬된 두 부분 배열을 하나로 병합한다병합 시에는 두 정렬된 배열을 비교하여 하나의 정렬된 배열로 합친다.2. 동작 원리단계설명1배열을 재귀적으로 반씩 나눔2분할된 배열..

Topic 2025.03.29

선택 정렬(Selection Sort) 알고리즘

개요선택 정렬(Selection Sort)은 정렬되지 않은 부분에서 가장 작은(또는 큰) 값을 선택해 맨 앞의 값과 교환하는 방식으로 정렬을 수행하는 알고리즘이다. 반복적으로 최솟값을 선택하고 정렬된 영역 뒤에 배치하면서 전체 배열을 정렬해나간다. 구현이 간단해 정렬 알고리즘 입문용으로 적합하며, 메모리 사용이 적은 것이 특징이다.1. 개념 및 정의선택 정렬은 다음과 같은 방식으로 동작한다:전체 배열에서 가장 작은 값을 찾아 첫 번째 위치와 교환두 번째부터 끝까지 반복하여 두 번째로 작은 값을 두 번째 위치로 이동이런 식으로 n-1번 반복해 정렬 완료2. 동작 원리 단계 설명 1단계i번째 인덱스를 기준으로 최솟값을 찾음2단계최솟값과 i번째 값을 교환(swap)3단계i를 1 증가시키고 배열 끝까지 반복배..

Topic 2025.03.29

버블 정렬(Bubble Sort) 알고리즘

개요버블 정렬(Bubble Sort)은 가장 간단하고 직관적인 정렬 알고리즘 중 하나로, 인접한 두 원소를 비교하여 큰 값을 뒤로 보내는 방식으로 동작한다. 반복적으로 배열을 순회하며 작은 값을 앞쪽으로, 큰 값을 뒤쪽으로 '버블처럼' 이동시키는 방식에서 그 이름이 유래되었다. 구현이 쉬워 교육용으로 자주 사용되며, 소규모 데이터나 정렬이 거의 완료된 배열에 적합하다.1. 개념 및 정의버블 정렬은 인접한 두 값을 반복 비교하고, 순서가 잘못된 경우 교환(swap)하여 정렬하는 방식이다. 전체 배열을 여러 번 순회하면서 가장 큰 값을 맨 끝으로 보내고, 점점 정렬 범위를 줄여나간다.2. 동작 원리 단계 설명 1첫 번째 요소부터 인접한 두 값을 비교2큰 값을 오른쪽으로 교환3배열 끝까지 반복 후, 가장 큰..

Topic 2025.03.28

플로이드-워셜(Floyd-Warshall) 알고리즘

개요플로이드-워셜(Floyd-Warshall) 알고리즘은 그래프에서 모든 정점 쌍 간의 최단 경로를 효율적으로 구하는 알고리즘이다. 다익스트라나 벨만-포드와 달리 단일 시작점이 아닌 전체 정점 간의 경로를 계산하며, 동적 계획법(Dynamic Programming) 기반으로 3중 반복문을 통해 구현된다. 네트워크 분석, 지도 서비스, 경로 최적화 등에서 광범위하게 활용된다.1. 개념 및 정의Floyd-Warshall 알고리즘은 가중치가 있는 방향 그래프에서 정점 i에서 j로 가는 최단 거리 d[i][j]를, 중간 정점 k를 거쳐 최적화해 나가는 방식이다. 음수 가중치는 가능하나, 음수 사이클은 허용되지 않는다.2. 알고리즘 동작 원리 단계 설명 1단계거리 행렬 d[i][j]를 초기화 (자기 자신은 0,..

Topic 2025.03.28

벨만-포드(Bellman-Ford) 알고리즘

개요벨만-포드(Bellman-Ford) 알고리즘은 음수 가중치 간선이 있는 그래프에서도 시작 노드로부터의 최단 경로를 찾을 수 있는 알고리즘이다. 다익스트라와 달리 우선순위 큐를 사용하지 않고, 간선 정보를 반복적으로 갱신하는 방식으로 동작한다. 또한, **음수 사이클(Negative Cycle)**의 존재 여부도 탐지할 수 있어, 금융 모델, 네트워크 분석 등에서도 유용하게 활용된다.1. 개념 및 정의벨만-포드 알고리즘은 하나의 시작 정점에서 다른 모든 정점까지의 최단 경로를 구하되, 음수 간선이 존재해도 정확한 결과를 보장한다. 각 간선을 V-1번 반복하면서 최단 거리를 갱신하며, 마지막 반복에서 거리값이 줄어들 경우 음수 사이클 존재로 간주한다.2. 알고리즘 동작 원리 단계 설명 1단계시작 정점의..

Topic 2025.03.28

BFS 알고리즘(Breadth-First Search)

개요BFS(Breadth-First Search)는 그래프나 트리의 탐색 알고리즘 중 하나로, 시작 노드에서 가까운 노드부터 차례대로 탐색해 나가는 너비 우선 방식이다. 큐(Queue)를 기반으로 하며, 최단 거리 탐색과 레벨 기반 처리가 가능해 다양한 문제 해결에 널리 사용된다. 본 글에서는 BFS의 개념, 동작 원리, 시간 복잡도, 구현 방법, 활용 사례 등을 체계적으로 정리한다.1. 개념 및 정의BFS는 탐색 시작 노드에서 인접한 노드들을 먼저 방문한 뒤, 그다음 레벨의 노드들을 방문하는 방식으로 그래프를 탐색하는 알고리즘이다. FIFO 구조의 큐를 사용하며, 방문 순서가 레벨 순으로 진행된다. 무가중치 그래프에서 최단 경로를 찾는 데 가장 적합한 알고리즘이다.2. BFS 알고리즘 동작 방식 단계 ..

Topic 2025.03.28

순회 알고리즘(Traversal Algorithms)

개요순회 알고리즘(Traversal Algorithms)은 트리(Tree), 그래프(Graph)와 같은 비선형 자료구조 내의 모든 노드(또는 정점)를 체계적으로 방문하는 방법이다. 순회는 구조의 전체 상태를 파악하거나 특정 노드 검색, 경로 탐색, 연산 수행에 필수적이다. 이 글에서는 트리 순회와 그래프 순회를 중심으로 다양한 순회 알고리즘의 개념, 구현 방식, 시간 복잡도 및 활용 사례를 정리한다.1. 개념 및 정의순회(Traversal)는 자료구조에 저장된 데이터를 하나씩 방문하며 특정 작업(출력, 계산 등)을 수행하는 과정이다. 선형 구조는 단순 순차 탐색으로 충분하지만, 트리나 그래프는 분기 구조를 갖기 때문에 다양한 방식의 순회가 존재한다.2. 트리 순회(Tree Traversal) 순회 방식 ..

Topic 2025.03.28

탐색 알고리즘(Search Algorithms)

개요탐색 알고리즘은 데이터 집합 내에서 특정 값을 찾기 위해 사용되는 알고리즘이다. 효율적인 탐색은 데이터 처리 성능에 직결되며, 자료구조와 문제 특성에 따라 다양한 탐색 방식이 활용된다. 선형 탐색처럼 단순한 방식부터 이진 탐색, 해시 탐색, 그래프 기반 탐색(DFS, BFS), 트리 탐색까지 광범위하게 존재한다. 본 글에서는 탐색 알고리즘의 개념, 종류, 시간 복잡도, 활용 사례를 중심으로 체계적으로 설명한다.1. 개념 및 정의탐색 알고리즘은 주어진 데이터 구조에서 특정 키나 값을 찾는 절차이다. 자료의 정렬 여부, 크기, 구조에 따라 탐색 방식의 효율이 달라지며, 경우에 따라 최적화된 알고리즘 선택이 중요하다.2. 탐색 알고리즘의 분류 분류 설명 적용 자료구조 선형 탐색데이터를 처음부터 끝까지 ..

Topic 2025.03.28

선형 자료구조(Linear Data Structures)

개요선형 자료구조는 데이터를 순차적으로 저장하고 처리하는 구조로, 가장 기본적이고 널리 사용되는 데이터 조직 방식이다. 데이터의 삽입, 삭제, 탐색 등을 효율적으로 수행할 수 있도록 다양한 형태의 선형 구조가 존재하며, 메모리 구조와 응용 목적에 따라 적절한 자료구조를 선택하는 것이 중요하다. 본 글에서는 배열(Array), 연결 리스트(Linked List), 스택(Stack), 큐(Queue)의 개념, 구조, 특징, 활용 사례를 체계적으로 정리한다.1. 개념 및 정의 자료구조 정의 특징 배열동일한 타입의 데이터를 연속된 메모리 공간에 저장고정 크기, 인덱스 접근 빠름연결 리스트포인터를 통해 노드들이 연결된 구조동적 크기, 삽입/삭제 효율적스택한쪽 끝에서 삽입/삭제가 이뤄지는 LIFO 구조후입선출(..

Topic 2025.03.28
728x90
반응형