[C言語]水平11650:座標位置合わせ
構想
解読を開始したばかりのコード(タイムアウト)
#include <stdio.h>
int main()
{
int n,i,j;
scanf("%d", &n);
int x[n], y[n];
i = 0;
while(i < n)
{
scanf("%d %d", &x[i], &y[i]);
i++;
}
i = 0;
while(i < n - 1)
{
j = i + 1;
while(j < n)
{
if(x[i] >= x[j] && y[i] >= y[j])
{
int temp;
temp = x[i];
x[i] = x[j];
x[j] = temp;
temp = y[i];
y[i] = y[j];
y[j] = temp;
}
j++;
}
i++;
}
i = 0;
while(i < n)
{
printf("%d %d\n",x[i], y[i]);
i++;
}
}
構想
タイムアウトしました.クイックソートの使用を検討します.でも問題があった
1.急速なソートを直接実現するには、私の今の実力はまだ足りない.では、内蔵関数を使用するべきで、qsortは1つの配列しか含まれていません.compareも2つの値だけを比較します.
2.しかし、私たちが望んでいるのはx座標だけでなく、y座標も考えなければなりません.比較ではx==x 1ではy座標を考える方法が思いつかない.
3.最終的にグーグルのポスト構造体を使う方法を見つけた.
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int x;
int y;
} coord; //coord형의 구조체 선언
int compare(const void *a, const void *b)
{
coord A = *(coord *)a; //coord형의 A로 입력받은 a를 사용할 수 있게한다.
coord B = *(coord *)b;
if (A.x > B.x) // 구조체의 x를 끌고와서 사용한다. 오름차순 정렬
return 1;
else if (A.x == B.x) // x좌표가 같다면,
{
if (A.y > B.y) // y좌표를 비교한다. 오름차순 정렬
return 1;
else
return -1; // 그게 아니라면 -1반환.
}
return -1; // A.x < B.x면 -1
}
int main()
{
int n, i;
scanf("%d", &n);
i = 0;
coord arr[n]; // 구조체형으로 배열을 선언한다.
while (i < n)
{
scanf("%d %d", &arr[i].x, &arr[i].y);
// 구조체배열로 arr[0]의 x값,y값 각각 설정하면서 간다.
i++;
}
qsort(arr, n, sizeof(coord), compare); // 퀵정렬 사용
i = 0;
while (i < n)
{
printf("%d %d\n", arr[i].x, arr[i].y); // 정렬된 배열 출력
i++;
}
}
今回は本当に勉強になりました私は構造体なのか、なぜ使うのか、なぜtypedefを使うのか、ただ待っていて、私はとても喜んでいます.なぜhttps://dojang.io/mod/page/view.php?id=409 typedefを使うのか
https://sedangdang.tistory.com/16コードコメントサイト
https://velog.io/@inwooleeme/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-11650%EB%B2%88-%EC%A2%8C%ED%91%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0コードリファレンスサイト2<-ここからたくさん学びました
https://modoocode.com/55構造体の概念整理.
Reference
この問題について([C言語]水平11650:座標位置合わせ), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-11650-좌표-정렬하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol