[C++] 백준 좌표 정렬하기

멋진감자·2024년 11월 19일
0

알고리즘

목록 보기
3/20
post-thumbnail

얼마 전 11650번을 풀 때 벡터를 두 개나 만들어서 굉장히 복잡하게 풀었다. 시간도 오래 걸리고 생긴 것도 못생겨서 맘에 안들었지만 맞았다는 사실에 의의를 두고 넘어간 문젠데 그 다음 단계 문제를 풀려고 보니까 저번처럼 그지같이 풀기가 너무 너무 싫은거다.

아유 하나 더 배울 때 됐다 하고 vector에 pair 넣어서 풀었는데 어우 아주 속이 시원해져서 잊어먹기 전에 머리에 꽂아두려고 갖고왔다.

11650. 좌표 정렬하기

먼저 11650번 저번 그 똥코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int n;
vector<vector<int>> posV(100001);
vector<vector<int>> negV(100001);

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		int x, y;
		cin >> x >> y;
		if (x < 0) negV[-x].push_back(y);
		else posV[x].push_back(y);
	}

	for (int i = 0; i < 100001; i++) {
		sort(posV[i].begin(), posV[i].end());
	}
	for (int i = 0; i < 100001; i++) {
		sort(negV[i].begin(), negV[i].end());
	}

	for (int i = 100000; i > 0; i--) {
		if (negV[i].empty()) continue;
		for (int j = 0; j < negV[i].size(); j++) {
			cout << -i << " " << negV[i][j] << "\n";
		}
	}
	for (int i = 0; i < 100001; i++) {
		if (posV[i].empty()) continue;
		for (int j = 0; j < posV[i].size(); j++) {
			cout << i << " " << posV[i][j] << "\n";
		}
	}

	return 0;
}

아우 드러워

but 오늘 새로 짠 코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int n, x, y;
vector<pair<int, int>> v;

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> x >> y;
		v.push_back({ x, y });
	}

	sort(v.begin(), v.end());

	for (int i = 0; i < n; i++) {
		cout << v[i].first << " " << v[i].second << "\n";
	}

	return 0;
}

이쁘다.

빠르다.

11651. 좌표 정렬하기 2

11651번은 y 기준이라 cmp 함수만 추가해주면 된다.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

vector<pair<int, int>> v;

int n;

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

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		int x, y;
		cin >> x >> y;
		v.push_back({ 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;
}

자료구조가 이러게 중요한 줄 알았으면 씨쁠 안맞았지
아니지 알았는데 그냥 모단거지 바보
언젠간 한 번 삭 훑어야쓰것다..

profile
난멋져

0개의 댓글