본문 바로가기
백준 문제 풀이 & C++ 공부

백준 11651번 C++

by daisy0461 2021. 9. 3.

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

이 문제말고 다른 문제인 좌표정렬하기1? 이라고 해야하나.. 1번 좌표 정렬하기 문제를 풀었을 때는

sort를 사용할 때 그냥 vector를 sort(a.begin(), a.end());를 사용하면

자동으로 a.frist를 비교하고 b.frist를 비교해서 출력을 해주기 때문에 사용자 정의 함수를 코딩할 필요가 없었습니다.

 

하지만 이 문제는 두번째 값을 먼저 비교하기 때문에 사용자 정의 함수를 만들 필요성이 있었습니다.

그래서 사용자 정의 함수를 만들면서 어떠한 기준을 통해서 sort가 되는지 알게 되었습니다다.

 

sort를 비교하는 return값이 bool이라는 점을 처음 알게되었습니다.

값을 비교해서 a.first < b.first를 했을 때 true라면 a.first가 앞으로 배치가 되는 것입니다.

false면 따로 위치 이동이 안됩니다.

 

sort를 통해 비교할 때 한번쯤 사용자 정의 함수를 통해서 비교를 해보고 싶었는데

이렇게 공부를 하게 되어서 반가웠습니다.

 

#include <iostream>
#include<algorithm>
#include<vector>

using namespace std;

bool compare(pair<int, int> a, pair<int, int> b) {
	if (a.second == b.second) {
		return a.first < b.first;			//a.first가 작으면 true. 즉 작은게 앞에 배치가 된다.
	}

	return a.second < b.second;				//a.second가 더 작으면 true. 즉 작은게 앞에 배치가 된다.
}


int main() 
{
	vector<pair<int, int>> a;
	int n;		//몇개를 받을 것인가
	cin >> n;

	int x; int y;

	for (int i = 0; i < n; i++) {
		cin >> x;
		cin >> y;

		a.push_back(make_pair(x, y));
	}

	sort(a.begin(), a.end(), compare);

	for (int i = 0; i < n; i++) {
		cout << a[i].first << " " << a[i].second << "\n";
	}
}

 

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 2108번 C++  (0) 2022.08.07
백준 1003번 C++  (0) 2021.09.12
백준 11866번 C++  (0) 2021.09.01
백준 18111번 C++  (0) 2021.09.01
백준 10845번 C++  (0) 2021.08.29