오늘의 문제는 “11651번 좌표 정렬하기 2”.
2차원 평면 위의 점 N개를 입력받아, 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순으로 정렬 후 출력하는 비교적 간단한 문제다.
pair와 vector 그리고 sort 함수를 사용해서 간단히 풀었다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, x, y;
vector <pair <int, int>> data;
pair <int, int> z;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> x >> y;
z = make_pair(y, x);
data.push_back(z);
}
sort(data.begin(), data.end());
for (int i = 0; i < data.size(); i++)
{
cout << data[i].second << " " << data[i].first << endl;
}
return 0;
}
특별히 까다로운 예외케이스도 없을 것 같아서 예제 입력으로만 시험해보고 제출했는데 시간초과란다.
4달 후…
우연히 이 문제를 다시 접하게 됐고, 다른 사람들이 올린 질문을 확인해봤는데
endl이 문제가 될 수 있다고 했다.
그래서 혹시나 하고
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, x, y;
vector <pair <int, int>> data;
pair <int, int> z;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> x >> y;
z = make_pair(y, x);
data.push_back(z);
}
sort(data.begin(), data.end());
for (int i = 0; i < data.size(); i++)
{
cout << data[i].second << " " << data[i].first << "\n";
}
return 0;
}
endl만 “\n”으로 수정했는데, 정답이다.
백준을 다시 시작했을 때는 endl을 많이 경계했었는데, 어느샌가 무의식중에 endl을 쓰고 있었던 것이다.
앞으로는 다수의 개행이 필요할 때는 반드시 “\n”을 사용해야겠다.