반응형
자료구조 | 알고리즘/비선형 자료구조2023. 10. 31. 12:43[자료구조] 이진 탐색 트리

이진 탐색 트리란? 이진 트리의 한 종류로 왼쪽 자식 노드에는 부모 노드보다 작은 값, 오른쪽 자식 노드에는 부모 노드보다 큰 값을 저장하여 만든 트리 https://lgphone.tistory.com/90 13-2. 이진 탐색 트리와 자가 균형 이진 탐색 트리 (Binary Search Tree and Self-balancing Binary Tree): 파이썬 이진 탐색 트리 이진 탐색 트리 (binary search tree) 는 노드를 정렬된 순서로 유지하는 자료구조이다. 이진 트리로 이루어지며, 각 노드에는 값과 두 자식 노드에 대한 포인터가 있다. 또한 선택적으 lgphone.tistory.com https://ejklike.github.io/2018/01/09/traversing-a-binar..

자료구조 | 알고리즘/동적 계획법2023. 10. 31. 09:37[알고리즘] 동적 계획법을 이용하여 구간합 구하기(Prefix Sum)

1. 구간합이란? 어떤 배열이 주어졌을 때 원하는 구간의 합을 말한다. 2. 구간합 알고리즘 구간합 개념 고등학교때 배운 수열의 합을 이용하여 원하는 구간의 합을 구하는 법을 배웠다. 자연수 n에 대하여 수열 A(n)의 1 ~ n까지의 합을 S(n)이라고 할 때 두 자연수 a ~ b까지의 합은 S(b) - S(a-1)이다. [증명] a > a >> b; for (int i = 1; i > A[i]; //S(b), S(a) 구하기 for(int i=1; i Ai; S[i] = S[i-1] + Ai; } cin >> a >> b; cout

자료구조 | 알고리즘/심화 알고리즘2023. 10. 30. 16:11[자료 구조] 세그먼트 트리

필수 선행 개념: 분할 정복, 이분 탐색 배열 arr = {1, 3, 5, 10, 2}이 있다고 해보자. 특정 구간의 최댓값, 최솟값, 구간합, 구간곱을 구한다고 할 때 질문이 하나라면 O(N)에 해결할 수 있다. 만약 질문이 10만개라면 어떨까? O(N²) = 약 11자리 이므로 1초안에 해결이 불가능하다. 이때 세그먼트 트리를 이용하면 O(log N)에 해결이 가능하다. 배열의 크기는 자료의 개수(N)에 대해 N보다 크거나 같은 2의 제곱수에 두배한 크기만큼 미리 할당해두어야 한다. 시뮬레이션 1. 세그먼트 트리 초기화하기 int init(int st, int en, int node){ if(st == en) return tree[node] = arr[st]; int mid = (st + en) / ..

자료구조 | 알고리즘/비선형 자료구조2023. 10. 30. 16:11[자료 구조] 트리

트리란? 트리란 싸이클이 없는 무방향 그래프를 말한다. 싸이클이 존재하지 않아서 모든 노드가 루트가 될 수 있다. 마치 실로 연결된 구슬이 있는데 한 구슬을 잡아서 들어올릴 때마다 그 구슬이 루트가 되고 트리 구조가 형성되는 것과 비슷하다. 트리 순회하기 그래프의 구조를 가지므로 BFS와 DFS를 이용할 수 있다. 이 과정에서 부모의 정보 or 깊이의 정보가 필요한 경우 중간중간에 기록해주면 된다. 1. BFS void bfs(int root){ queue q; q.push(root); while(!q.empty()){ int cur = q.front(); cout

재귀 함수와 반복문의 비교(recursion function)
자료구조 | 알고리즘/분할 정복(Devide Conquer)2023. 10. 17. 13:00재귀 함수와 반복문의 비교(recursion function)

1. 재귀 함수란? 한자로 풀어서 해석하면 다시 "재(再)" 돌아올 "귀(歸)", 말 그대로 다시 돌아오다 라는 뜻이다. 프로그래밍의 관점에서 재귀란 "함수 자신을 다시 호출하다"라는 의미이다. 2. 재귀함수의 쓰임 재귀함수는 기본적으로 현재의 condition을 유지한 상태로 전의 작업과 비슷한 행동을 할 때 매우 유용한 알고리즘이다. 이러한 재귀함수의 특성때문에 stack, 분할정복 등의 많은 문제에서 활용되곤 한다. 다음은 재귀함수로 간단하게 구현할 수 있는 문제이다. https://wondrous-developer.tistory.com/1 [백준 17609] 회문 (C++) 처음 고민했던 사고과정과 이후 정답풀이를 같이 정리해 놓았다. 1. 문제 https://www.acmicpc.net/prob..

분할 정복 대표 예시: 하노이탑(hanoi top)
자료구조 | 알고리즘/분할 정복(Devide Conquer)2023. 10. 16. 21:45분할 정복 대표 예시: 하노이탑(hanoi top)

hanoi함수 void hanoi(int n, int from, int to) { if (n == 0) return; hanoi(n - 1, from, 6 - from - to); cout

단조 스택(monotone stack) - 스택을 이용한 정렬
자료구조 | 알고리즘/정렬(Sort)2023. 10. 16. 01:03단조 스택(monotone stack) - 스택을 이용한 정렬

1. monotone stackmonotone stack은 stack의 한 종류로 "단조로운 스택"이란 뜻이다. 우리말로 해석하자면 단순하게 증가하거나 감소하기만 하는 stack이다. 즉, 오름차순 또는 내림차순의 형태만 가지는 stack을 말한다.2. 활용데이터를 다루거나 알고리즘 문제를 푸는 과정에서 stack을 사용할 때 오름차순 또는 내림차순으로 stack을 유지해야하는 경우가 생긴다.

728x90
반응형
image