초보 개발자의 이야기, 릿허브

[C++] 백준 11561번 좌표 정렬하기 2 본문

코딩테스트/📗 백준 (BOJ)

[C++] 백준 11561번 좌표 정렬하기 2

릿99 2022. 2. 3. 18:02
728x90
반응형
1. 문제이해

https://www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

2차원 평면위의 좌표들을 y좌표가 증가하는 순으로,

y좌표가 같다면 x좌표가 증가하는 순으로 정렬하는 프로그램을 구현하는 것이 목표이다.

 

 

 

2. 문제풀이

 

2차원 평면 좌표를 y좌표 순으로 정렬하되, y좌표가 같다면 x좌표 순으로 정렬하는 것이 목표이다.

이전에 풀이한 11650번 좌표 정렬하기와 흡사한 문제이다.

해당 문제에서는 x좌표 순으로 정렬해줬다면, 이번 문제는 y좌표 순으로 정렬해준다는 차이가 있다.

이전 풀이한 문제의 cmp 함수에서 y좌표 순으로 정렬, 같으면 x좌표 순으로 정렬한다는 점만 수정해주면 된다.

자세한 풀이 방법은 아래 포스팅을 참고하자.

 

https://beginnerdeveloper-lit.tistory.com/110

 

[C++] 백준 11650번 좌표 정렬하기

1. 문제이해 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤..

beginnerdeveloper-lit.tistory.com

 

 

 

3. 소스코드
#include <iostream>
#include <algorithm>
using namespace std;

class coordinate {
public:
	int x;		// x좌표
	int y;		// y좌표
};

bool cmp(coordinate a, coordinate b) {
	// y좌표가 증가하는 순으로 정렬하되, 
	// y좌표가 같으면 x좌표가 증가하는 순서대로 정렬
	if (a.y == b.y) {
		return a.x < b.x;
	}

	else {
		return a.y < b.y;
	}
}

coordinate* c = new coordinate[100000];

int main() {
	int N;
	int numx, numy;

	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> c[i].x >> c[i].y;
	}

	stable_sort(c, c + N, cmp);

	for (int i = 0; i < N; i++) {
		cout << c[i].x << " " << c[i].y << "\n";
	}

	return 0;
}

bool cmp 함수의 부분만 살짝 수정해주었다.

y좌표가 같다면, x좌표가 증가하는 순서대로 정렬, ( if (a.y == b.y) { return a.x < b.x; } )

같지 않다면, y좌표가 증가하는 순서대로 정렬되도록 했다. ( else { return a.y < b.y; } )

 

 


문제에 대한 질문이나 지적은 언제나 감사히 받고 있습니다.😊

 

 

 

 

 

728x90
반응형