PS 연습

[PS 연습 - 정렬] 백준 문제 풀이 - 11651 좌표 정렬하기 2

생선묵김치찌개 2022. 4. 25. 23:43

👩🏻‍💻 문제링크

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. 문제 이해

  • y좌표를 중가하는 순으로가 1순위
  • y좌표 같으면 x좌표 증가하는 순으로

 

✍️소스코드

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

bool cmp(pair<int,int> a,pair<int,int> b) //!!!
{
	if(a.second<b.second)
		return true;
	else if(a.second==b.second)
	{
		if(a.first<b.first)
			return true;
		else 
			return false;
	}
	return false;
}

int main()
{
	int N; cin>>N;
	vector <pair<int,int>> v;
	
	for(int i=0; i<N; i++)
	{
		int x,y;
		cin>>x;
		cin>>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';
}

 

깨달은점 :

1. sort에서 사용자 지정함수에 pair을 넘길떄는 vector형으로 넘기는것이 아니라 pair<int,int> a,pair<int,int> b 이런식으로 넘긴다

2. pair에서 first, second 불러올때 () 안붙이는거 까먹지 말자

3. cin>>x>>y 해도 된다^^

체감난이도 걸린시간 참고 사용 문법
11min pair 사용법 sort 함수