백준 문제풀이

11650 번 : 좌표 정렬하기

하다블 2023. 5. 6. 18:19
반응형

문제는 다음과 같습니다.

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

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

풀이 코드는 다음과 같습니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(pair<int,int>p1,pair<int,int>p2)
{
	if(p1.first==p2.first)
		return p1.second<p2.second;
	else
		return p1.first<p2.first;
}
int main()
{
	int n;
	cin>>n;
	vector<pair<int,int>>v;
	for(int i{0};i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		v.push_back(make_pair(x,y));
		
	}
	sort(v.begin(),v.end(),cmp);
	for(int i{0};i<n;i++)
	{
		cout<<v[i].first<<" "<<v[i].second<<"\n";
	}
	return 0;
}

정렬은 3번째 요소에 사용자 정의 함수나 오름차순, 내림차순을 정할 수 있는 인자를 추가할 수 있습니다.

이번 문제의 경우에는 두 개의 수를 하나로 묶어서 첫 번째 원소로 정렬을 하고 만약 같다면 두 번째 원소로 정렬하도록 하라고 했으므로 pair를 통해 두 수를 하나로 묶고 조건에 따라 함수를 만들어주어 sort에 넣으면 풀 수 있습니다.

반응형

'백준 문제풀이' 카테고리의 다른 글

1181 번 : 단어 정렬  (0) 2023.05.06
11651 번 : 좌표 정렬하기 2  (0) 2023.05.06
2587 번 : 대표값2  (0) 2023.05.04
2839 번 : 설탕 배달  (0) 2023.05.04
19532 번 : 수학은 비대면강의입니다  (0) 2023.05.03