๋ฐฑ์ค 11651: ์ขํ ์ ๋ ฌํ๊ธฐ2
https://www.acmicpc.net/problem/11651
-> ์ ์ ๊ฐ์(N)์ ์ ๋ ฅ๋ฐ๊ณ , ๊ฐ x์ y ์ขํ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
-> y์ ์ค๋ฆ์ฐจ์, y๊ฐ ๊ฐ๋ค๋ฉด x์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ค์ ์ถ๋ ฅํ๋ค.
#1) ์ฒซ ๋ฒ์งธ ์๋ -> ์๊ฐ ์ด๊ณผ
#include <stdio.h>
int main(void) {
int N;
int x[100000];
int y[100000];
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d %d", &x[i], &y[i]);
}
for (int j = 0; j < N; j++) {
for (int w = j + 1; w < N; w++) {
if (y[j] > y[w]) {
int t;
t = y[j];
y[j] = y[w];
y[w] = t;
int p;
p = x[j];
x[j] = x[w];
x[w] = p;
}
else if (y[j] == y[w]) {
if (x[j] > x[w]) {
int q;
q = x[j];
x[j] = x[w];
x[w] = q;
}
}
}
printf("%d %d\n", x[j], y[j]);
}
return 0;
}
- x์ y๋ฅผ ๊ฐ ๋ฐฐ์ด๋ก ์ ๋ ฅ๋ฐ๊ณ , ์์๋๋ก ๋น๊ตํด๋ณด๋ฉฐ ๊ฐ์ ๋ฐ๊พธ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
* ์๊ฐ ์ด๊ณผ๊ฐ์ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ์์ํ๊ณ ์ฌ์ ์ ๋ฐฉ์งํด์ผํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.. ์์งํ ์๊ฐ๊ฐ์ ๊ฑด ๋ด๊ฐ ์ด๋ป๊ฒ ์ ์ดํด์ผ ํ๋์ง๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.. ํด
#2) ๋ ๋ฒ์งธ ์๋
* ์ฝ๋์ฐธ๊ณ : https://sedangdang.tistory.com/16
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x;
int y;
}coord;
int compare(const void* first, const void* second)
{
coord* a = (coord*)first;
coord* b = (coord*)second;
if (a->y < b->y)
return -1;
else if (a->y > b->y)
return 1;
else
{
if (a->x < b->x)
return -1;
else
return 1;
}
}
int main()
{
int i, N;
coord* list;
scanf("%d", &N);
list = (coord*)malloc(N * sizeof(coord));
for (i = 0; i < N; i++)
{
scanf(" %d %d", &list[i].x, &list[i].y);
}
qsort(list, N, sizeof(list[0]), compare);
for (i = 0; i < N; i++)
{
printf("%d %d\n", list[i].x, list[i].y);
}
free(list);
return 0;
}
- ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ํต์ํธ ํจ์๋ฅผ ํตํด์ ์ ๋ ฌํด์ค๋ค.
* ์๋ฌด๋ฆฌ ์๊ฐํด๋ ๊ณ์ ๋จธ๋ฆฌ๊ฐ ๊ผฌ์ฌ์ ๊ตฌ๊ธ๋งํ๋ค. ๊ตฌ์กฐ์ฒด๋ฅผ ์ด์ฉํด์ ํธ๋ ๋ฐฉ๋ฒ์ด ๋ง์ด ๋์์๋๋ฐ ์ดํด๊ฐ ์๋ผ์ ๊ตฌ์กฐ์ฒด ๊ฐ๋ ๋ค์ ์ ๋ฆฌํด๋ณด์๋ค. qsortํจ์๋ฅผ ์ด์ฉํด์ ํธ๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ดํด๊ฐ ์๋์ด์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด ๋ถ์ํ๋ค. ๋์ค์ ๋ค์ ํ์ด๋ด์ผ๊ฒ ๋ค.
* [๊ตฌ์กฐ์ฒด ๊ฐ๋ ์ ๋ฆฌ]: https://mnzy.tistory.com/4
-> qsort/compareํจ์ ์ ๋ฆฌ
- Quick sort : pivot์ ์ ํ๊ณ pivot๋ณด๋ค ์์ ๊ฐ๋ค์ pivot์ ์ผ์ชฝ pivot๋ณด๋ค ํฐ ๊ฐ๋ค์ pivot์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์น์ํค๊ณ pivot์ ์ผ์ชฝ ๊ฐ๋ค๊ณผ ์ค๋ฅธ์ชฝ๊ฐ๋ค๋ ๊ฐ ๊ฐ ๋ฐ๋ก ์ ๋ ฌํด์ค๋ค.
- (c์ธ์ด) stdlib.h์์ qsortํจ์๋ฅผ ์ ๊ณตํด์ค๋ค. //์ฆ, ํธ์ถ๋ง ํด์ฃผ๋ฉด ๋จ
- ex.
-> qsort(list, N, sizeof(list[0]), compare);
-> list: ์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด์ ํฌ์ธํฐ
-> N: ๋ฐฐ์ด์ ์์ ๊ฐ์
-> sizeof(list[0]): ๋ฐฐ์ด์ ์์ ํ๋์ ํฌ๊ธฐ
-> compare: ๋น๊ต๋ฅผ ์ํํ ํจ์
- comapare ํจ์
-> compare ํจ์์ ๋ฆฌํด๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์
-> ๋ฆฌํด ๊ฐ์ด 0๋ณด๋ค ์์ ๊ฒฝ์ฐ first < second
-> ๋ฆฌํด ๊ฐ์ด 0๋ณด๋ค ํด ๊ฒฝ์ฐ first > second
-> ๋ฆฌํด๊ฐ์ด 0์ด๋ฉด ๋ ๊ฐ์ด ๊ฐ์
* ์ฐธ๊ณ
https://twpower.github.io/56-qsort-in-c
https://m.blog.naver.com/xxxstarxxx/221388492777
์ฒ์์ ๋น์ฐํ ์ ๋ต์ผ ์ค ์๊ณ ์์๋๋ฐ ์๊ฐ์ด๊ณผ.. ์ดํ์ ํผ์ ํด๊ฒฐํด๋ณด๋ ค๋ค๊ฐ ์๊ฐ์ด ๊ฝค ์ค๋ ๊ฑธ๋ ธ๋ค.
ํผ์๋ง์ผ๋ก ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์์ ๊ตฌ๊ธ๋ง์ ํ๋๋ฐ, ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ ๊ฐ์์ ๋นํฉํ๋ค.
๊ตฌ์กฐ์ฒด๋ ์ ์์ฐ๋ ๊ฐ๋ ์ด๋ผ ๋ง์ด ๊น๋จน์๋ค. ์ด๋ฒ ๊ธฐํ์ ๋ณต์ตํด์ ์ฐจ๋ผ๋ฆฌ ๋คํ์ธ ๊ฒ ๊ฐ๋ค.