Algorithms/Sorting
-
[정렬 알고리즘] 카드 정렬하기 ★★☆Algorithms/Sorting 2021. 3. 5. 14:56
기출 : 백준 #1715 정답을 제출했으나 시간 초과가 떠서 결국 정답을 참고했다 문제의 핵심 아이디어는 정렬된 데이터들 중 가장 작은 두 가지를 선택하는 것이다 필자는 두 가지를 선택할때마다 정렬을 시도했으나 이는 우선순위 큐를 사용하는 것이 정답이었다 이 문제를 통해 배울 것은 다음과 같다 1. 항상 정렬된 상태를 원한다면 우선순위 큐를 사용하자! 2. C++ STL Priority Queue는 기본적으로 Max Heap이다! #include using namespace std; int n; int ans; priority_queue pq; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0;i < n;i++) { in..
-
[정렬 알고리즘] 안테나 ★☆☆Algorithms/Sorting 2021. 3. 5. 11:55
기출 : 2019 SW 마에스트로 입학 테스트 쉬운 문제였지만 아이디어를 생각해내지 못해 결국 정답을 확인했다 사실 아직도 직관적인 이해는 되지 않는다 주어진 안테나의 위치를 정렬한 뒤 중간값을 제출하면 된다 #include using namespace std; int n; int sum; int house[200001]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0;i > house[i]; sort(house, house+n); cout
-
[정렬 알고리즘] 국영수 ★☆☆Algorithms/Sorting 2021. 3. 5. 11:26
기출 : 백준 #10825 STL에서 제공하는 sort함수를 이용해 문제를 풀었다 이번 문제를 풀면서 알게 된 점은 바로 string 함수끼리 비교가 가능하다는 것이었다 string s1, s2; return s1>s2 위 코드를 실행시키면 자동으로 문자를 하나씩 비교하여 아스키 코드를 오름차순으로 비교해준다 #include using namespace std; struct student { string name; int kuk; int young; int su; student(string n, int k, int y, int s) : name(n), kuk(k), young(y), su(s) {} }; vector v; int n; bool cmp(student s1, student s2){ if (s..
-
[정렬 알고리즘] 두 배열의 원소 교체 ★☆☆Algorithms/Sorting 2021. 2. 13. 17:20
문제 설명 : 두 개의 자연수 배열 A와 B를 가지고 있다. K번의 바꿔치기를 통해 만들 수 있는 A원소 합의 최댓값은? 바꿔치기 연산이란 A원소 하나와 B원소 하나를 골라서 두 원소를 바꾸는 것이다 입력 조건 조건 1 : 첫 번째 줄에 N,K가 공백으로 구분되어 입력된다 (1 k; for (int i = 0;i > a[i]; for (int i = 0;i > b[i]; sort(a, a + n); sort(b, b + n); for (int i = 0;i < k;i++) swap(a[i], b[n-i-1]); for (int i = 0;i < n;i++) sum += a[i]; cout
-
[정렬 알고리즘] 성적이 낮은 순서로 학생 출력하기 ★☆☆Algorithms/Sorting 2021. 2. 13. 17:00
문제 설명 : N명의 학생 정보가 있다. 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오 입력 조건 조건 1 : 첫 번째 줄에 학생의 수 N이 입력된다 (1 n; for (int i = 0;i > student.name >> student.score; v.push_back(student); } sort(v.begin(),v.begin()+n,cmp); for (int i = 0;i < n;i++) { cout
-
[정렬 알고리즘] 문제풀이 전략Algorithms/Sorting 2021. 2. 13. 16:40
정렬이란 데이터를 특정한 기준에 따라 순서대로 나열하는 것을 말한다 일반적인 정렬의 종류를 알아보고 그 예제를 풀어볼 것이다 선택 정렬 (Selection Sort) N개 중 가장 작은 원소를 0번 원소와 swap하고 그 다음 N-1개 중 가장 작은 원소를 1번 원소와 swap하는 방식으로 매번 가장 작은 원소를 선택한다는 뜻에서 선택 정렬(Selection Sort)알고리즘이라고 한다 선택 정렬의 시간 복잡도는 N + (N-1) + (N-2) + ... + 1 = (N^2+N)/2 이므로 O(N^2)이다 선택 정렬은 뒤에서 배울 다른 정렬 알고리즘들과 비교했을 때 매우 비효율적이다 하지만 특정 리스트에서 가장 작은 데이터를 찾는 일이 코딩 테스트에서 잦으므로 선택 정렬에 익숙해질 필요가 있다 삽입 정렬..