[๋ฐฑ์ค] 2751๋ฒ : ์ ์ ๋ ฌํ๊ธฐ 2
์๋ ํ์ธ์ ์ฃผ์ธ์ฅ H์ ๋๋ค.
https://www.acmicpc.net/problem/2751
๋ฌธ์
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(1 ≤ N ≤ 1,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ซ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ์๋ ์ ๋๊ฐ์ด 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค. ์๋ ์ค๋ณต๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
5 5 4 3 2 1
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
1 2 3 4 5
ํด๋น ๋ฌธ์ ๋ ํต์ ๋ ฌ๋ก ํ์ด๋ณผ ์ ์์ต๋๋ค.
ํ์ง๋ง ํต์ ๋ ฌ์ ๋ฌธ์ ๋ ์ธ์ ๋ ์๊ฐ๋ณต์ก๋ O(N*log N)๊ฐ ๋์ง ์์์.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฌธ์ ๋ ์๋๋ ๋ฌธ์ ๋ ์์ง๋ง ์ ๋ต ์ฒ๋ฆฌ๊ฐ ๋์ง ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ C++ ์ sortํจ์๋ฅผ ์ด์ฉํด์ ์ฌ์ฉํด์ผ์ง๋ง ์ธ์ ๋ O(N*log N)๊ฐ ๋ฉ๋๋ค.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int number, data[1000000];
void quickSort(int* data, int start, int end) {
if (start >= end) { // ์์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ ๊ทธ๋๋ก ๋๊ธฐ
return;
}
int key = start; // ํค๋ ์ฒซ ๋ฒ์งธ ์์
int i = start + 1, j = end, temp;
while (i <= j) { // ์๊ฐ๋ฆด ๋๊น์ง ๋ฐ๋ณต
while (data[i] <= data[key]) { // ํค ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ ๋ง๋ ๋๊น์ง
i++;
}
while (data[j] >= data[key] && j > start) { // ํค ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ๋ง๋ ๋๊น์ง
j--;
}
if (i > j) { // ํ์ฌ ์๊ฐ๋ฆฐ ์ํ๋ฉด ํค ๊ฐ๊ณผ ๊ต์ฒด
temp = data[j];
data[j] = data[key];
data[key] = temp;
}
else { // ์๊ฐ๋ฆฌ์ง ์์๋ค๋ฉด i์ j๋ฅผ ๊ต์ฒด
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
quickSort(data, start, j - 1);
quickSort(data, j + 1, end);
}
int main(void) {
scanf("%d", &number);
for (int i = 0; i < number; i++) {
scanf("%d", &data[i]);
}
quickSort(data, 0, number - 1);
for (int i = 0; i < number; i++) {
printf("%d\n", data[i]);
}
return 0;
}
#include <stdio.h>
#include <algorithm>
int number, data[1000000];
int main(void) {
scanf("%d", &number);
for (int i = 0; i < number; i++) {
scanf("%d", &data);
}
std::sort(data, data + number);
for (int i = 0; i < number; i++) {
printf("%d\n", data[i]);
}
return 0;
}