by CodeJin19
1 min read

Categories

Tags

오늘의 문제는 “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”을 사용해야겠다.