반응형
문제는 다음과 같습니다.
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 |