일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 중복 순열
- 분할 정복
- 크루스칼
- 클래스
- MST
- BeautifulSoup
- 그리디
- 이분 탐색
- 링크드리스트
- 문자열
- 세그먼트 트리
- 조합
- 피보나치 수
- 재귀
- 메모리풀
- 순열
- SSAFY
- 큐
- 시뮬레이션
- 비트마스크
- dfs
- 빠른 입출력
- Knapsack
- 우선순위 큐
- DP
- lis
- 스택
- BFS
- 완전 탐색
- 백트래킹
- Today
- Total
목록개념 (10)
작심 24/7
최소힙, 루트 노드를 0번으로 지정. (1번으로 지정하는 게 더 편리하긴 함) int heap[100]; int heapSize = 0; void init(){ heapSize = 0; } int push(int value){ if (heapSize == 100) return 0; // 최대 사이즈를 넘어가면 나가리 heap[heapSize] = value; // 마지막 노드에 값 추가 // 마지막 노드에 추가한 값을 올바른 위치로 옮김 int current = heapSize; // 현재 위치 저장 while(current > 0 && heap[(current - 1) / 2] > heap[current]){ // 최소힙인데 부모 > 자식이면 안 되니까 바꿔주기 // 부모랑 자식 swap int tmp..
#include using namespace std; int arr[8] = {1, 2, 4, 5, 10, 21, 21, 22}; int binarySearch(int st, int en, int target) { // target 찾음 while (st
AND ( a & b ) 둘 다 1이면 1, 아니면 0 OR ( a | b ) 둘 다 0이면 0, 아니면 1 XOR ( a ^ b ) 둘이 다르면 1, 아니면 0 NOT ( ~a ) 반대 LEFT SHIFT ( a > b ) a를 b비트만큼 오른쪽으로 shift. 빈 공간은 0으로 채움 a / 2^b 와 같음 집합의 표현 집합의 i 번째 요소가 존재하면 1, 아니면 0으로 표현 가능 ex) {1, 2, 5} => 10011 연산자 우선순위 NOT ∨ 산술연산자 ∨ SHIFT ∨ 비교연산자 ∨ AND ∨ XOR ∨ OR ∨ 논리연산자
#include using namespace std; int main() { int arr[12] = { 1, 3, 2, 4, 3, 2, 5, 3, 1, 2, 3, 4 }; int cnt[5] = { 0 }; //원소의 범위만큼만 정의한다 int N = 12, cnt_len = 5; //계수 정렬 for (int i = 0; i < N; i++) cnt[arr[i] - 1]++; //원소의 크기에 따른 개수 카운트 for (int i = 0; i < cnt_len; i++) { while (cnt[i] != 0) { cout
#include using namespace std; void heapify(int arr[], int N, int parent) { int child1 = parent * 2 + 1, child2 = parent * 2 + 2; int Max = parent, temp = 0; if (child1 < N) { if (arr[parent] < arr[child1])Max = child1; } if (child2 < N) { if (arr[parent] < arr[child2]) { if (arr[child1] < arr[child2]) { Max = child2; } } } if (Max != parent) { //부모가 자식보다 더 작으면 교환한다 temp = arr[Max]; arr[Max] = ar..
#include using namespace std; int arr[8] = { 21, 10, 12, 20, 25, 13, 15, 22 }, sorted[100]; void mergeSort(int st, int en){ if (st >= en) return; int mid = (st + en) / 2; mergeSort(st, mid); mergeSort(mid + 1, en); int i = st, j = mid + 1; for (int k = st; k
#include using namespace std; int arr[8] = { 21, 10, 12, 20, 25, 13, 15, 22 }; void quickSort(int st, int en){ int low = st, high = en; if (high
#include #include using namespace std; int main() { int N = 5; int arr[5] = { 1, 2, 3, 4, 0 }; for (int i = 1; i = 0; j--) { if (arr[j] > arr[j + 1]) swap(arr[j], arr[j+1]); //키 값인 arr[j+1] 보다 왼쪽 값이 더 크면 교환한다 else break; //키 값이 더 클 경우 더 비교할 필요 없으므로 종료시킨다 } } for (int i = 0; i < N; i++) cout