얼마 전 11650번을 풀 때 벡터를 두 개나 만들어서 굉장히 복잡하게 풀었다. 시간도 오래 걸리고 생긴 것도 못생겨서 맘에 안들었지만 맞았다는 사실에 의의를 두고 넘어간 문젠데 그 다음 단계 문제를 풀려고 보니까 저번처럼 그지같이 풀기가 너무 너무 싫은거다.
아유 하나 더 배울 때 됐다 하고 vector에 pair 넣어서 풀었는데 어우 아주 속이 시원해져서 잊어먹기 전에 머리에 꽂아두려고 갖고왔다.
먼저 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번은 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;
}
자료구조가 이러게 중요한 줄 알았으면 씨쁠 안맞았지
아니지 알았는데 그냥 모단거지 바보
언젠간 한 번 삭 훑어야쓰것다..