(C++) 백준 11651번 - 좌표 정렬하기2

코딩너구리·2025년 11월 6일

코딩 문제 풀이

목록 보기
69/266

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

문제

> 2차원 평면에 점 N개가 주어졌을 때, y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순으로 정렬한 뒤 출력하라.

접근

좌표로 주어지기 때문에 Pair을 사용해 점을 정의해주고 정렬 기준을 세워 sort해준다.

문제해결

> pair로 x,y좌표를 dot벡터의 first, second값으로 입력받고 sort를 통해 정렬해준다.
> 정렬기준을 문제에 주어진대로 정의해준다.
입력받은 좌표의 y가 같으면 x좌표가 작은순서로,
그게 아니면 y좌표가 오름차순으로 정렬되도록
> 정렬된 좌표들을 출력한다.

코드

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

bool comp(pair<int, int> a, pair<int, int> b)
{
	if (a.second == b.second)
		return a.first < b.first;
	return a.second < b.second;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int N;
	cin >> N;

	vector<pair<int, int>> dot(N);
	for (int i = 0; i < N; i++) cin >> dot[i].first >> dot[i].second;

	sort(dot.begin(), dot.end(), comp);

	for (auto a : dot)
		cout << a.first << " " << a.second << '\n';
}

후기

stable_sort를 전에 해본적이 있어서 연습할겸stable_sort를 사용해 풀었는데 그냥 sort를 사용할때랑 정렬기준도 같고 처리방식도 같아 사용하는 이점이 없었다.
속도가 더빠르고 메모리사용도 더 적은 sort로 풀었다.

0개의 댓글