์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DFS
- ๊ตฌํ
- SQL
- ๋ฐฑ์ค
- ๊ทธ๋ํ
- ์ฐ์ ์์ํ
- DP
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๊ณ ๋ฆฌ์ฆ
- ํ์ด์ฌ
- ์ํ
- ์์๊ตฌํ๊ธฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋จธ์ง์ํธ
- ์ค๋ธ์
- ๊น์ด์ฐ์ ํ์
- ์ ๋ ฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- LIS
- ๊ทธ๋ฆฌ๋
- ๋์ ํฉ
- ์๋ฃ๊ตฌ์กฐ
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ์์ํ์
- ๊ทธ๋ํํ์
- ๋์ ๊ณํ๋ฒ
- BFS
- ๋๋น์ฐ์ ํ์
- db
- ๋ณํฉ์ ๋ ฌ
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[๋ฐฑ์ค] 11650๋ฒ: ์ขํ ์ ๋ ฌํ๊ธฐ - C++ ๋ณธ๋ฌธ
๋ฌธ์
2์ฐจ์ ํ๋ฉด ์์ ์ N๊ฐ๊ฐ ์ฃผ์ด์ง๋ค. ์ขํ๋ฅผ x์ขํ๊ฐ ์ฆ๊ฐํ๋ ์์ผ๋ก, x์ขํ๊ฐ ๊ฐ์ผ๋ฉด y์ขํ๊ฐ ์ฆ๊ฐํ๋ ์์๋ก ์ ๋ ฌํ ๋ค์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ๊ฐ์ N (1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ i๋ฒ์ ์ ์์น xi์ yi๊ฐ ์ฃผ์ด์ง๋ค. (-100,000 ≤ xi, yi ≤ 100,000) ์ขํ๋ ํญ์ ์ ์์ด๊ณ , ์์น๊ฐ ๊ฐ์ ๋ ์ ์ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ ์ ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฌ์ ์ด์ฉํ์ฌ ํธ๋ ๋ฌธ์ .
๋ณํฉ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ํ์๊ณ , x์ขํ๊ฐ ์ฆ๊ฐํ๋ ์์ผ๋ก - x์ขํ๊ฐ ๊ฐ์ผ๋ฉด y์ขํ๊ฐ ์ฆ๊ฐํ๋ ์์ผ๋ก ์ ๋ ฌํด์ผ๋๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด๋ฌธ์ ํ๋ ๋ ๋ถ์๋ค.
์ฝ๋
#include <cstdio>
void merge(int** sorted, int** arr, int begin, int mid, int end);
void mergeSort(int** sorted, int** arr, int begin, int end);
void printArr(int** arr, int n);
int main(void) {
int n;
scanf("%d", &n);
int** arr = new int*[n];
for(int i = 0; i < n; i++) {
arr[i] = new int[2];
}
int** sorted = new int*[n];
for(int i = 0; i < n; i++) {
sorted[i] = new int[2];
}
for(int i = 0; i < n; i++) {
scanf("%d %d", &arr[i][0], &arr[i][1]);
}
mergeSort(sorted, arr, 0, n - 1);
printArr(arr, n);
for(int i = 0; i < n; i++) {
delete[] arr[i];
delete[] sorted[i];
}
delete[] arr;
delete[] sorted;
return 0;
}
void merge(int** sorted, int** arr, int begin, int mid, int end) {
int i, j, k;
i = begin;
j = mid + 1;
k = begin;
while(i <= mid && j <= end) {
if(arr[i][0] < arr[j][0]) {
sorted[k][0] = arr[i][0];
sorted[k][1] = arr[i][1];
i++;
}
else if(arr[i][0] == arr[j][0]) {
if(arr[i][1] < arr[j][1]) {
sorted[k][0] = arr[i][0];
sorted[k][1] = arr[i][1];
i++;
}
else {
sorted[k][0] = arr[j][0];
sorted[k][1] = arr[j][1];
j++;
}
}
else {
sorted[k][0] = arr[j][0];
sorted[k][1] = arr[j][1];
j++;
}
k++;
}
if(i > mid) {
for(int a = j; a <= end; a++, k++) {
sorted[k][0] = arr[a][0];
sorted[k][1] = arr[a][1];
}
}
else {
for(int a = i; a <= mid; a++, k++) {
sorted[k][0] = arr[a][0];
sorted[k][1] = arr[a][1];
}
}
for(int a = begin; a <= end; a++) {
arr[a][0] = sorted[a][0];
arr[a][1] = sorted[a][1];
}
}
void mergeSort(int** sorted, int** arr, int begin, int end) {
int mid;
if(begin < end) {
mid = (begin + end) / 2;
mergeSort(sorted, arr, begin, mid);
mergeSort(sorted, arr, mid + 1, end);
merge(sorted, arr, begin, mid, end);
}
}
void printArr(int** arr, int n) {
for(int i = 0; i < n; i++) {
printf("%d %d\n", arr[i][0], arr[i][1]);
}
}
'์ฝ๋ฉํ ์คํธ ์ค๋น > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 10825๋ฒ: ๊ตญ์์ - C++ (0) | 2021.08.11 |
---|---|
[๋ฐฑ์ค] 11651๋ฒ: ์ขํ ์ ๋ ฌํ๊ธฐ 2 - C++ (0) | 2021.08.10 |
[๋ฐฑ์ค] 2751๋ฒ: ์ ์ ๋ ฌํ๊ธฐ 2 - C++ (0) | 2021.08.07 |
[๋ฐฑ์ค] 11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ - C++ (0) | 2021.08.03 |
[๋ฐฑ์ค] 2225๋ฒ: ํฉ๋ถํด - C++ (0) | 2021.08.02 |