백준 11650 : 좌표 정렬하기

와 좌표 정렬~~ 쉽져~~

 

그냥 정렬하면 되겠네요 무지성 정렬~~~~~~~~~~~~~~~~~~

#include <stdio.h>

int solve() {
	int N, temp;
	scanf("%d", &N);
	
	int axis[N][2];
	
	for(int i=0;i<N;i++)
		scanf("%d %d", &axis[i][0], &axis[i][1]);
	
	for(int i=0;i<N-1;i++) {
		for(int j=i+1;j<N;j++) {
			if(axis[i][0] > axis[j][0]) {
				temp = axis[i][0];
				axis[i][0] = axis[j][0];
				axis[j][0] = temp;
				
				temp = axis[i][1];
				axis[i][1] = axis[j][1];
				axis[j][1] = temp;
			}
			else if(axis[i][0] == axis[j][0]) {
				if(axis[i][1] > axis[j][1]) {
					temp = axis[i][1];
					axis[i][1] = axis[j][1];
					axis[j][1] = temp;
				}
			}
		}
	}
	
	for(int i=0;i<N;i++)
		printf("%d %d\n", axis[i][0], axis[i][1]);
}

int main() {
	solve();
	return 0; 
}

하면 당연히 시간 오버. 다른 방법으로 문제를 접근해야한다.

 

#include <stdio.h>
#include <stdlib.h>

typedef struct arr {
	int x;
	int y;
} axis;

int compare(const void *a, const void *b) {
	axis p1 = *(axis *)a;
	axis p2 = *(axis *)b;
	
	if(p1.x > p2.x)
		return 1;
	else if(p1.x < p2.x)
		return -1;
	else {
		if(p1.y > p2.y)
			return 1;
		else if(p1.y < p2.y)
			return -1;
		else
			return 0;
	}
}

int solve() {
	int N;
	scanf("%d", &N);
	
	axis res[N];
	
	for(int i=0;i<N;i++)
		scanf("%d %d", &res[i].x, &res[i].y);

	qsort(res, N, sizeof(axis), compare);
	
	for(int i=0;i<N;i++)
		printf("%d %d\n", res[i].x, res[i].y);
}

int main() {
	solve();
	return 0; 
}

 

이번에도 qsort를 사용하였다, 구조체를 사용하여 x와 y를 담아주었고 compare 함수에 분기를 주어 정렬했다.

 

머리를 참 싸매면서 풀었는데, 여전히 갈길이 멀어보인다.

'백준 (C99) > 정렬 (完)' 카테고리의 다른 글

백준 1181 : 단어 정렬  (0) 2022.02.06
백준 11651 : 좌표 정렬하기 2  (0) 2022.02.06
백준 1427 : 소트인사이드  (0) 2022.02.05
백준 2108 : 통계학  (0) 2022.02.05
백준 10989 : 수 정렬하기 3  (0) 2022.02.05