728x90
728x90

정렬 19

백준] 2456 - 나는 학급회장이다(한국정보올림피아드:KOI 2011 지역본선)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에는 반의 학생들의 수 N (3 b.three) return true; else if (a.three == b.three) { if (a.two > b.two) return true; else return false; } else return false; } } int main(void) { int n, tmp; cin >> n; vector arr(n, { 0,0,0,0,0 }); for (int i = 0; i < 4; i++) arr[i].idx = i; for (int i = 1; i tmp; if (tmp == 1) arr[j].one++; else if (tmp == 2) arr[j].two++; else arr[j].three++; ar..

백준] 6160 - Election Time(USACO 2008)

시간 제한 : 1초메모리 제한 : 128MB 입력Line 1: Two space-separated integers: N and KLines 2..N+1: Line i+1 contains two space-separated integers: A_i and B_i 출력Line 1: The index of the cow that is expected to win the election. 소스코드 #include #include #include using namespace std; struct cow { int first; int second; int originIdx; }; bool compare(const struct cow &a, const struct cow &b) { return a.first > b...

백준] 11728 - 배열 합치기

시간 제한 : 1.5초메모리 제한 : 256MB 입력첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절대값이 109보다 작거나 같은 정수이다. 출력첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다. 소스코드 #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); int m, n, idx1, idx2; cin >> n >> m; vector arr1(n), arr2(m), ans(n+m); for (int i = 0; i >..

백준] 2947 - 나무 조각(COCI 2008/2009)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 조각에 써 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다. 출력두 조각의 순서가 바뀔때 마다 조각의 순서를 출력한다. 소스코드 #include using namespace std; int main(void) { int arr[5]; for (int i = 0; i > arr[i]; for (int i = 0; i arr[j + 1]) { int tmp; tmp = arr[j]; arr[j] = arr[j + 1]; a..

백준] 1302 - 베스트셀러

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다. 출력첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다. 소스코드 #include #include #include #include using namespace std; struct book { string name; int sold; }; bool compare(const struct book a, const struct book b) {..

C#] 리스트뷰(ListView) 컬럼 클릭하여 정렬하기

리스트뷰 요소를 잘 보면 상단에 버튼처럼 클릭이 활성화된 항목들이 존재한다. 간혹 뭔가를 만들다 보면, 이들 항목을 기준으로, 즉 해당 칼럼을 기준으로 아이템들을 정렬해야 하는 경우가 생긴다. 이때 해당 리스트뷰(ListView)의 속성의 이벤트 탭에서 ColumnClick이라는 이벤트를 처리할 메서드를 지정하고 그 메서드에서 클릭된 칼럼을 분류, 그에 따른 정렬을 구현해주면 된다. 아래 그림은 DirectoryCleaner라는 말 그대로 디렉토리를 정리해주는 윈폼 프로그램으로 필자가 개인적으로 만들고 있는 프로그램 중 하나다. 특정 디렉토리에 저장된 파일들, 하위 디렉토리의 파일들까지 모두 탐색한 결과를 리스트뷰에 담아서 보여주고 있다. 이름, 경로, 최종 수정일, 용량에 대한 정보를 리스트 뷰에 저장..

백준 알고리즘] 2399 - 거리의 차이

시간 제한 : 2초메모리 제한 : 128MB 문제수직선에 n개의 점이 찍혀 있다. 각각의 점의 x좌표가 주어졌을 때, n^2개의 모든 쌍에 대해서 거리의 차이를 더한 값을 구하는 프로그램을 작성하시오. 즉, 모든 i, j에 대해서 |x[i] - x[j]|의 합을 구하는 것이다. 입력첫째 줄에 n(1≤n≤10,000)이 주어진다. 다음 줄에는 x[1], x[2], x[3], …, x[n]이 주어진다. 각각은 0 이상 1,000,000,000 이하의 정수이다. 출력첫째 줄에 답을 출력한다. 소스코드 #include #include using namespace std; int main(void) { int n; long long *list, sum = 0; cin >> n; list = new long lon..

[C++] STL을 사용해 간편하게 알고리즘 문제 풀기

알고리즘 문제를 풀다 보면, 어떤 경우에는 데이터 처리에 앞서 정렬을 해야 하는 경우가 있다.그럴 때마다 정렬소스를 짜는 것이 비효율적일 뿐더러 정렬 이후 데이터 처리에 신경을 써줘야할 때문제의 시간복잡도를 고려해 퀵 정렬 등을 짜고 있는 건 생산적이지 못하다고 느꼈다.정렬에 대해 자세히 아는 건 좋지만, 그걸 실용적으로 활용하는 것도 중요하다는 이야기다. C언어를 주로 썼을 때는, qsort를 사용했다.(이부분에 대해서는 다른 포스팅에서 소개하겠다.) C++에서는 sort를 사용하면 빠른 시간 내에 정렬된 결과를 받을 수 있다.성능 측면에서는 다른 함수에 비해서는 준수한 수준이다. 이 성능에 대한 진 단순히 퀵 정렬만으로 구성한 정렬이 아니라 복합적으로 힙정렬, 삽입정렬도 섞여 있기 때문이다. 아래 사..

DataStructure,Algorithm] 힙정렬(HeapSort)

입력 받은 배열을 O(n)으로 히프 트리 구조로 생성할 수 있지만, 여기서는 일단 O(nlogn)으로 진행되는 히프트리 구성을 실시했다. (이 부분에 대해서는 차후 포스팅할 생각) 최대 히프트리를 구현했고, 최대 히프트리를 바탕으로 오름차순 정렬을 하는 코드다. 내림차순 정렬을 보고 싶다면, list 배열에 넣는 인덱스 순서만 바꿔주면 되고 공부 삼아 최소 히프트리를 구현하는 것도 나쁘지 않을 것이다. 숙련자가 보기에는 이 소스는 잘 짜여진 소스는 아니라는 것을 말해주고 싶다. 처음 자료구조를 배우던 시절 구조에 대해서만 깨우치고 만든 소스라서, 불필요한 메모리 할당도 있고 히프 트리 구성에서 시간 복잡도 손실을 보기는 하지만, 히프트리를 바탕으로 힙정렬(혹은 히프정렬)을 구현하는 것까지는 문제되지 않아..

728x90