본문 바로가기
반응형
[C++로 배우는 알고리즘과 자료구조] Day 2: 배열과 문자열 배열 (Array)배열은 동일한 타입의 요소들이 연속적으로 저장된 자료구조입니다. 배열은 고정된 크기를 가지며, 인덱스를 사용하여 요소에 접근할 수 있습니다. 배열은 C++에서 가장 기본적인 자료구조 중 하나입니다.배열의 특징:고정된 크기: 배열의 크기는 생성 시 결정되며, 변경할 수 없습니다.빠른 접근 속도: 인덱스를 사용하여 O(1) 시간 복잡도로 요소에 접근할 수 있습니다.연속된 메모리 공간: 배열은 연속된 메모리 공간에 저장됩니다.배열 예제#include int main() { // 배열 선언 및 초기화 int arr[5] = {1, 2, 3, 4, 5}; // 배열의 크기 int size = sizeof(arr) / sizeof(arr[0]); // 배열의 요소 출력 .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 1: 트라이(Trie) 자료구조와 문자열 검색 트라이(Trie) 자료구조 소개트라이(Trie)는 문자열 또는 단어의 집합을 저장하고 효율적으로 검색하기 위한 트리 기반의 자료구조입니다. 주로 문자열 검색, 자동 완성, 사전 구현 등에 사용됩니다. 트라이는 각 노드가 문자 하나를 나타내며, 루트 노드에서 시작하여 각 문자를 따라가면서 단어를 구성합니다.트라이의 주요 특징빠른 검색: 문자열의 길이에 비례하는 시간 복잡도 (O(L))에서 검색이 가능합니다. 여기서 (L)은 문자열의 길이입니다.공유 구조: 공통 접두사를 가지는 문자열을 공유하여 공간을 절약합니다.삽입과 검색의 단순함: 삽입과 검색 연산이 단순하고 직관적입니다.트라이의 기본 연산삽입 (Insert): 문자열을 트라이에 삽입합니다.검색 (Search): 문자열이 트라이에 존재하는지 확인합니다... 2024. 8. 1.
[알고리즘] 11. 심화 자료구조 Index 1. 우선순위 큐와 힙 2. 트리 3. 바이너리 인덱스 트리 4. 참고자료1.  우선 순위 큐와 힙우선순위 큐- 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조- 데이터를 우선 순위에 따라 처리하고 싶을 때 사용- 삽입/삭제시 O(logN)- heap 정렬은 O(NlogN) 구현 종류1) 리스트 이용해 구현2) heap을 이용해 구현 Heap- 완전 이진 트리 자료구조: root 노드부터 시작하여 왼쪽 자식 노드, 오른쪽 자식 노드 순서대로 데이터가 삽입되는 tree- Heap에서는 항상 root 노드를 제거- Min Heap / Max Heap 힙 정렬def heap_sort(iterable): h = [] result = [] for val in iterable: he.. 2024. 7. 20.
[알고리즘] 10. 기타 알고리즘 Index 1. 소수 판별 2. 에라토스테네스의 체 3. 투 포인터 4. 구간 합 5. 최소 공통 조상 5. 참고자료 1. 소수 판별소수(Prime Number)- 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수 # 시간 복잡도: O(N)def is_prime(x): for i in range(2, x): if x % i == 0: return False return True # 시간 복잡도: O(sqrt(N))import mathdef is_prime(x): for i in range(2, int(math.sqrt(x)) + 1): if x % i == 0: return False return True 2. 에라토스테네스.. 2024. 7. 20.
[알고리즘] 9. 기타 그래프 이론 Index 1. 서로소 집합 자료구조 2. 서로소 집합을 활용한 사이클 판별법 3. 최소 신장 트리(크루스칼 알고리즘) 4. 위상 정렬 5. 추천 문제  6. 참고자료1. 서로소 집합 자료구조Disjoint Sets- 공통 원소가 없는 두 집합 서로소 집합 자료구조(= Union Find)- 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조- 두 종류의 연산을 지원- - Union: 두 개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산- - Find: 특정한 원소가 속한 집합이 어떤 집합인지- 연결성을 통해 집합의 형태를 확인 (동작 과정)1) Union 연산을 확인하여, 서로 연결된 두 노드 A, B를 확인  - A와 B의 루크 노드 A', B'를 각각 찾기  - A'를 B'.. 2024. 7. 20.
[알고리즘] 8. 최단 경로 알고리즘 Index 1. 최단 경로 문제 2. 다익스트라 최단 경로 3. 플로이드 워셜 4. 벨만 포드 5. 추천 문제  6. 참고자료1. 최단 경로 문제최단 경로 문제- 가장 짧은  경로를 찾는 알고리즘- 각 지점은 그래프에서 node로 표현, 지점 간 연결된 도로는 edge로 표현 (최단 경로 유형)- 한 지점에서 다른 한 지점까지의 최단 경로- 한 지점에서 다른 모든 지점까지의 최단 경로- 모든 지점에서 다른 모든 지점까지의 최단 경로 2.  다익스트라 최단 경로Djikstra- 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산- 음의 간선이 없을 때 정상적으로 동작- 매 상황에서 방문하지 않은 가장 적은 비용이 드는 노드를 선택(그리디)- 한 단계당 하나의 노드에 대한 최단 거리를 확실히 .. 2024. 7. 20.
[참고자료] 자료구조/알고리즘/코딩테스트 자료구조 알고리즘 코딩테스트- [교재] 코딩테스트 합격자 되기(자바스크립트편) 코딩테스트 사이트- 프로그래머스: 코딩테스트 연습을 할 수 있고 교육, 채용 등 개발자에게 필요한 것이 갖추어진 사이트- SW Expert Academy: 삼성에서 운영하고, 알고리즘을 학습 할 수 있는 사이트- 백준 온라인 저지(solved.ac): 프로그래밍 문제를 해결한 다음, 소스를 제출하고 온라인으로 채점을 받을 수 있는 사이트- Softeer: 현대자동차그룹의 코딩테스트 사이트- Leetcode: 코딩 인터뷰 준비를 위한 온라인 플랫폼 2024. 7. 19.
[알고리즘] 7. 그래프 탐색 Index 1. 스택과 큐 2. 재귀 3. 유클리드 호제법 4. DFS 5. BFS  6. 추천 문제 7. 참고자료- Search란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정- 그래프 탐색 알고리즘으로 DFS/BFS가 있음 1. 스택과 큐Stack- FILO(First In Last Out)의 자료구조- 입구와 출구가 동일stack = []# 삽입stack.append(val)# 삭제stack.pop()# 최상단 원소 확인print(stack[-1])Queue- FIFO(First In First Out)의 자료구조- 입구와 출구가 양쪽으로 나있는 터널 형태queue = []# 삽입queue.append(val)# 삭제queue.pop(0)# 최하단/최상단 원소 확인queue[0]queue[-1.. 2024. 7. 19.
[알고리즘] 6. 이진 탐색 Index 1. 순차 탐색 2. 이진 탐색 3. 이진 탐색 라이브러리 4. 파라메트릭 서치 5. 추천 문제 6. 참고자료1.  순차 탐색순차 탐색(Sequential Search)- 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 2.  이진 탐색이진 탐색(Binary Search)- 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법- O(log N) (재귀적 구현)def binary_search(arr, target, start, end): if start > end: return None mid = (start + end) // 2 if arr[mid] == target: return mid elif arr[mid] > target: re.. 2024. 7. 19.
[알고리즘] 5. 동적 계획법 Index 1. 다이나믹 프로그래밍 2. 추천문제 3. 참고자료1.  다이나믹 프로그래밍Dynamic Programming- 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법- 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않음- 점화식 : 인접한 항들 사이의 관계식- Memoization: 한 번 계산한 결과를 메모리 공간에 메모하는 기법(=Caching), - Top-down(메모이제이션) 방식과 Bottom-up 방식이 존재- Bottom-up 방식을 사용시 결과 저장용 리스트는 DP 테이블 이용- 분할 정복은 부분 문제의 중복이 없음 (조건)1) Optimal Substructure(최적 부분 구조)- 큰 문제를 작은 문제로 나눌 수 있으며 작은.. 2024. 7. 19.
반응형