- Today
- Total
목록View All (355)
DATA101
📚 목차 1. 힙 자료구조 2. 힙 자료구조는 언제 사용할까? 3. 힙 자료구조의 종류 4. 힙 자료구조의 동작 과정(최소 힙) 4.1. 데이터 삽입 4.2. 데이터 삭제 5. 힙 자료구조 구현(Python) 5.1. heapq 셋업 5.2. 힙 데이터 삽입(heappush) 5.3. 힙 데이터 삭제(heappop) 5.4. 리스트를 힙으로 변경(heapify) 1. 힙 자료구조 힙 자료구조는 가장 높은(혹은 가장 낮은) 우선순위(e.g., 최댓값, 최솟값)를 가지는 노드를 빠르게 찾아내기 위해 고안된 *완전 이진트리(Complete Binary Tree) 기반의 자료구조입니다. 따라서 가장 높은(또는 가장 낮은) 우선순위를 가지는 노드가 항상 루트 노드(root node)에 오는 게 특징입니다. * 완..
📚 목차 1. 우선순위 큐(Priority Queue)란? 2. 힙(Heap) 자료구조 2.1. 힙 자료구조란? 2.2. 우선순위 큐 구현 방식: 리스트 vs 힙 3. 힙 기반의 우선순위 큐 구현(Python) 3.1. heapq 라이브러리 소개 3.1.1. 힙 원소 추가(heappush) 3.1.2. 힙 원소 삭제(heappop) 3.1.3. 리스트를 힙으로 변경(heapify) 3.2. 힙 기반의 우선순위 큐 구현 예시 1. 우선순위 큐(Priority Queue)란? 우선순위 큐는 말 그대로 우선순위가 가장 높은 데이터를 가장 먼저 추출하는 자료구조입니다. 일반적으로 큐(Queue) 자료구조는 선입선출 방식으로서 가장 먼저 삽입된 데이터를 가장 먼저 추출합니다. 간단하게 특징이 유사한 자료구조들의 ..
본 포스팅에서는 그래프(graph) 자료구조에 대해 알아봅니다. 그래프 자료구조의 구성 그래프는 그림 1 과 같이 노드(Node)와 간선(Edge)으로 표현됩니다. 이때 노드는 정점(Vertext)이라고도 불립니다. 일반적으로 노드와 간선은 각각 도시와 도시를 잇는 도로를 예시로 많이 표현됩니다. 즉, A 도시(노드)와 B 도시(노드)가 있을 때, A 도시에서 B 도시로 이동하기 위해 도로(간선)를 거친다고 생각하시면 노드와 간선에 대한 이해가 쉬울 것입니다. 그래프 탐색? 그래프 탐색이란 하나의 노드에서 시작해서 다른 노드들을 방문하는 것을 의미합니다. 노드 인접? 두 노드가 간선으로 연결되어 있다면, '두 노드는 인접(Adjacent)해 있다'라고 말합니다. 그래프 자료구조 관련 용어 정리 그래프(트..
본 포스팅에서는 다이나믹(동적) 프로그래밍에 대해 알아봅니다. 📚 목차 1. 다이나믹 프로그래밍이란? 2. 다이나믹 프로그래밍 예제 3. 재귀함수 기반 구현 3.1. 소스코드 3.2. 문제점 3.2.1. 연산 복잡성 3.2.2. 문제 발생의 원인 3.2.3. 문제 해결 방안 4. 다이나믹 프로그래밍 기반 구현 4.1. 탑 다운 방식(재귀함수 활용) 4.1.1. 메모이제이션이란? 4.1.2. 소스코드 4.1.3. 특징 4.2. 바텀 업 방식(반복문 활용) 4.2.1. 소스코드 4.2.2. 특징 1. 다이나믹 프로그래밍이란? 다이나믹(동적) 프로그래밍은 큰 문제를 작은 문제로 나누어 연산 속도와 메모리를 최대한으로 활용하기 위한 기법입니다. 특정 값을 얻기 위해 매번 같은 결과를 반환하는 연산을 굳이 반복해..
본 포스팅에서는 이진 탐색(Binary Search) 알고리즘에 대해 알아봅니다. 📚 목차 1. 이진 탐색이란? 2. 이진 탐색의 동작 과정 3. 이진 탐색의 시간 복잡도 4. 이진 탐색 구현(Python) 1. 이진 탐색이란? 이진 탐색은 탐색의 범위를 절반씩 좁혀가며 데이터를 탐색하는 알고리즘입니다. 이진탐색 알고리즘은 리스트 내 데이터가 어느 정도 정렬되어 있어야만 사용 가능하며 데이터가 무작위로 정렬되어 있다면 사용할 수 없습니다. 이진 탐색 알고리즘은 입력 데이터가 많거나(e.g., 1,000만 개 이상) 탐색 범위의 크기가 매우 넓을 때(e.g., 1,000억 이상) 효과적으로 문제를 해결할 수 있습니다. 2. 이진 탐색의 동작 과정 이진 탐색의 동작 과정에 대해 이해하기 위해서는 순차 탐색(..
본 포스팅에서는 순차 탐색(Sequential Search)에 대해 알아봅니다. 📚 목차 1. 순차 탐색(이란? 2. 동작 과정 3. 구현(Python) 4. 시간 복잡도 1. 순차 탐색이란? 순차 탐색(Sequential Search)은 말 그대로 리스트 내 특정 데이터를 찾기 위해 앞에서부터 데이터를 차례대로 탐색하는 알고리즘입니다. 2. 동작 과정 순차 탐색의 과정은 아래와 같습니다. 풀어써서 복잡해 보이지만 맨 앞에서부터 차례대로 비교하는 단순한 방법입니다. 1️⃣ 맨 앞 데이터와 찾으려는 데이터가 같은지 탐색합니다. 2️⃣ 데이터가 서로 같지 않다면 다음 데이터와 찾으려는 데이터가 같은지 탐색합니다. 3️⃣ 같은 데이터를 찾기 전까지 2️⃣ 과정을 반복합니다. 리스트 내 데이터가 아무리 많아도 ..
본 포스팅에서는 정렬 알고리즘 문제 풀이 전략을 공유합니다. 정렬 알고리즘 문제 해결 전략 알고리즘 문제 풀이에 있어서 특별히 문제에서 요구사항이 없을 경우, 단순히 정렬이 필요한 상황에서는 기본 내장 정렬 라이브러리를 활용하시는 것이 가장 좋습니다. 다만, 데이터의 범위가 한정되어 있고 더욱 빠르게 동작하도록 문제를 풀어야 한다면 계수 정렬 알고리즘을 활용하시는 것이 좋습니다. 이처럼 아래에 주어진 상황에 맞는 알고리즘 문제 풀이 전략을 정리해 보았습니다. (1) 정렬 라이브러리 활용 문제 단순히 내장 정렬 라이브러리에 대해 알고 있고 사용할 줄 아는지 묻기 위한 문제 유형입니다. 기본적으로 내장 정렬 함수 사용방법에 대해 기본적인 부분들에 대해 숙지하고 있으면 어렵지 않게 문제를 풀 수 있습니다. (..
오늘은 파이썬 내장 함수인 sorted()와 sort()를 활용한 데이터 정렬 방법에 대해 공유해 드립니다. 그럼 바로 시작하죠! 목차 1. 기본 정렬 라이브러리 2. sorted 함수 3. sort 함수 4. key 매개변수를 활용한 정렬 기준 설정 5. 정렬 알고리즘 문제 해결 전략 1. 기본 정렬 라이브러리 파이썬에는 sorted 및 sort라는 정렬 함수가 기본적으로 내장되어 있습니다. 이 함수들은 리스트, 딕셔너리, 집합 등의 데이터 타입을 입력값으로 받고, 데이터 타입에 상관없이 항상 리스트 형태로 데이터를 정렬한 결과를 반환하는 것이 특징입니다. 또한, 이 함수들은 최악의 경우에도 O(N*log N) 의 시간 복잡도를 보장한다는 것이 특징입니다. 그럼 sorted 함수와 sort 함수 각각에..