[알고리즘] Stack ( 스택 )
·
알고리즘/풀이 힌트
Stack : 데이터를 일시적으로 저장하기 위한 자료구조 가장 먼저 들어온 데이터가 가장 마지막에 나가는 자료구조 ( FILO : First In Last Out) ex) 택배 상하차 : 택배차에 택배를 처음 넣은 것이 제일 마지막에 나온다. ​ Stack을 코드로 구현해보자면 import java.util.ArrayList; public class StackEx { public static void main(String[] args) { // TODO 자동 생성된 메소드 스텁 Stack s = new Stack(); for(int i = 1; i
[알고리즘] 백준 10989번 문제_수 정렬
·
알고리즘
수 정렬 : https://www.acmicpc.net/problem/10989 ================================== 풀이 ==================================== 계수 정렬 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(Sy..
[알고리즘] 백준 1431번 문제_시리얼 번호
·
알고리즘
시리얼 번호 정렬 :https://www.acmicpc.net/problem/1431 ================================== 풀이 ==================================== C++ 함수 사용 #include // C++ 헤더 #include // STL 라이브러리 -> sort() 함수가 정의되어있음 #include #include using namespace std; string a[20000]; int n; int getSum(string a) { int n = a.length(), sum = 0; for (int i = 0; i < n; i++) { if (a[i] - '0' = 0) { sum += a[i] - '0'; } } return sum; }..
[알고리즘] 백준 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..