문제
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 <algorithm>
#include <utility>
#include <vector>
using namespace std;
bool compare(pair<int,int> p1, pair<int,int> p2){
if(p1.second == p2.second){
return p1.first < p2.first;
}
return p1.second < p2.second;
}
int main(){
int n;
vector<pair<int, int>> v;
cin >> n;
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(), compare);
for(pair<int, int> p : v){
cout << p.first << ' ' << p.second << '\n';
}
return 0;
}
정리
pair, sort, sort의 compare함수를 이용해서 풀 수 있는 문제이다.
pair와 compare함수를 같이 사용해서 문제를 해결하는 방법은 이 문제 외에도 다른 문제들에서도 많이 쓰일 듯 하다.
참조
'Beakjoon > else' 카테고리의 다른 글
[백준] 10828번 스택 (C++) (0) | 2022.01.08 |
---|---|
[백준] 10814번 나이순 정렬 (C++) (0) | 2022.01.04 |
[백준] 1181번 단어정렬 (C++) - sort, compare (0) | 2022.01.02 |
[백준] 10951번 A+B - 4 (C++) (0) | 2021.12.29 |
[백준] 2741번 N 찍기 (C++) (0) | 2021.12.29 |