[알고리즘] 백준 1181번 문제_단어 정렬
·
알고리즘
단어 정렬 : https://www.acmicpc.net/problem/1181 ================================== 풀이 ==================================== C++ 함수 사용 string a[20000]; int n; bool compare(string a, string b) { if (a.length() b.length()){ return 0; } // 길이가 같은 경우 else { return a > n; // n 입력 for (int i = 0; i..
[알고리즘] 계수 정렬
·
알고리즘/풀이 힌트
선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬, 힙 정렬 중 가장 빠른 알고리즘은 당연히 퀵 정렬, 병합 정렬, 힙 정렬 중 하나일 것이다. ​ 하지만 '범위 조건' 이 있는 경우에 한해서 굉장히 빠른 알고리즘이 있다. 그것은 바로 계수 정렬이다. ​ 계수 정렬 : 단순하게 ' 크기를 기준으로 ' 세는 알고리즘 ​ 1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1 즉 5이하의 자연수 데이터들을 오름차순으로 정렬할 때 ​ 크기를 기준으로 정렬하기 때문에 크기 : 1 = 0 크기 : 2 = 0 크기 : 3 = 0 크기 : 4 = 0 크기 : 5 = 0 ​ 여기에서 1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 ..
[알고리즘] 힙 정렬
·
알고리즘/풀이 힌트
힙 정렬 : 힙 트리 구조 ( Heap Tree Structure)를 이용하는 정렬 방법 -> 병합 정렬 (Merge Sort) , 퀵 정렬 (Quick Sort) 만큼 빠른 정렬 알고리즘이다. ​ 힙(Heap)이 무엇인지 알기 전에 이진 트리(Binary Tree)에 대해서 알아보자면 이진트리 : 컴퓨터 안에서 데이터를 표현할 때 데이터를 각 노드에 담은 뒤 노드를 두 개씩 이어 붙이는 구조 여기서 각 노드는 자식 노드가 2개 이하인 노드여야 합니다. 1 : Root(루트) 라고 하며 3, 4, 5 : Leaf(리프)하고 한다. -> 이진트리의 종류도 많이 있는데 우선 완전 이진 트리를 알아보자면 데이터가 Root(루트) 노드 부터 시작해 자식 노드가 왼쪽 자식 노드, 오른쪽 자식 노드​​ 순으로 차근..
[알고리즘] C++ STL sort() 함수_Vector/Pair
·
알고리즘/풀이 힌트
클래스(Class)를 정의해서 여러 개의 변수가 존재하는 상황에서 '특정한 변수' 를 기준으로 정렬하는 방법은 실무에서는 적합한 방법이지만 프로그래밍 속도 측면에서는 유리하지 않다. ​ 일반적으로 프로그래밍 대회같은 빠른 개발이 필요할 때는 페어(Pair) 라이브러리를 사용하는 것이 효율적이다. #include #include #include #include // vector가 정의되어 있는 헤더 using namespace std; int main(void) { vector v; // pair : 한 쌍의 배열(int, string)을 묶어음 v.push_back(pair(90, "잉여인간 1호")); // 배열의 마지막 부분에 삽입을 나타내는 push.back v.push_back(pair(85, "..
[알고리즘] C++ STL sort() 함수_class
·
알고리즘/풀이 힌트
sort() 함수 사용하는 방법 #include #include // STL 라이브러리 -> sort() 함수가 정의되어있음 using namespace std; bool compare(int a, int b) { // 비교 함수 return a > b; // 정렬 기준 : 내림차순 정렬 } int main(void) { int a[10] = { 9, 3, 5, 4, 1, 10, 8, 6, 7, 2 }; sort(a, a + 10); // a -> 메모리 주소, a + 10 -> 정렬할 마지막 주소가 있는 메모리 주소 sort(a, a + 10, compare); // 추가로 함수를 넣어주면 원하는 정렬 기준으로 정렬을 할 수 있다. //=> 9 ~ 2 까지의 주소를 정렬한다는 사실을 나타냄 for (i..
[알고리즘] 백준 2751번 문제_1000만개 정렬
·
알고리즘
1000만개 정렬 : https://www.acmicpc.net/problem/2751 ================================== 풀이 ==================================== ​ 퀵 정렬 : 하나의 큰 문제를 두 개의 작은 문제로 분할하는 식으로 빠르게 정렬 int data[1000000]; void quickSort(int *data, int start, int end) { if (start >= end) { return; } int key = start, st = start + 1, ed = end, tmp; while (st = data[st] && st ed) { tmp = data[key]; data[key] = data[ed]; data[ed] =..
[알고리즘] 백준 2752번 문제_세수 정렬
·
알고리즘
세수 정렬 : https://www.acmicpc.net/problem/2752 ​ ================================== 풀이 ==================================== ​ 선택 정렬 : 가장 작은 값을 앞으로 이동 ( 연산횟수 : 6 번 ) int main(void) { int data[3]; int index, min, tmp; scanf("%d %d %d", &data[0], &data[1], &data[2]); for (int i = 0; i data[j]) { min = data[j]; index = j; } } tmp = dat..
[알고리즘] 백준 2750번 문제_단순 정렬
·
알고리즘
단순 정렬 : https://www.acmicpc.net/problem/2750 ================================== 풀이 ==================================== ​ 선택 정렬 : 가장 작은 값은 선택하여 앞으로 보내는 정렬 int main(void) { // 2750번 선택 정렬 int tmp, num,min, index; int data[1000]; scanf("%d", &num); for (int i = 0; i data[j]) { m..