개인공부용123 프로그래밍 블로그
[백준] boj 2751 본문
BOJ 2751 정렬문제
1. 풀이 방식 : Merge Sort로 NlogN 타임에 구현
- 직접 머지 소스 구현
- stl을 사용한 구현
2. 유의 사항 : C++ 입출력을 사용시 TimeOut이 나옴
* Merge 코드 구현
#include <iostream>
#include <stdio.h>
using namespace std;
#define MAX 1000000
int sort[MAX];
// 오름차순 정렬
// st ~ mid, mid + 1 ~ en
void merge(int* list, int start, int mid, int end) {
int i = start;
int j = mid + 1;
int k = start;
int l;
while (i <= mid && j <= end) {
if (list[i] <= list[j]) sort[k++] = list[i++];
else sort[k++] = list[j++];
}
if (i > mid) for (l = j; l <= end; ++l) sort[k++] = list[l];
else for (l = i; l <= mid; ++l) sort[k++] = list[l];
for (l = start; l <= end; ++l) list[l] = sort[l];
}
void mergesort(int* list, int start, int end) {
int mid;
if (start < end) {
mid = (start + end) / 2;
mergesort(list, start, mid);
mergesort(list, mid + 1, end);
merge(list, start, mid, end);
}
}
int main() {
int n;
scanf("%d", &n);
int arr[MAX];
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
mergesort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
printf("%d\n", arr[i]);
return 0;
}
* STL 사용
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX 1000000
int main() {
int T;
int arr[MAX];
cin >> T;
for (int i = 0; i < T; ++i)
cin >> arr[i];
sort(arr, arr + T);
for (int i = 0; i < T; ++i)
printf("%d\n", arr[i]);
return 0;
}
'알고리즘문제' 카테고리의 다른 글
[백준]boj15649 (0) | 2020.08.10 |
---|---|
[백준] boj10872 (0) | 2020.08.10 |
[백준] boj1316 (0) | 2020.07.06 |
[백준] 6591 (0) | 2017.05.19 |
[백준] 11051 이항계수문제 (0) | 2017.05.19 |