https://www.acmicpc.net/problem/11650
pair와 vector를 사용해서 좌표를 저장하고 정렬에 비교함수를 설정해서 비교하면 되겠다고 생각해서 해봤는데 시간초과가 떴다. 그래서 입력이 커서 그런가 싶어서 입출력 최적화를 하기위해 아래 코드를 넣었지만 그래도 시간초과가 떴다.
// 입출력 속도 최적화
ios::sync_with_stdio(false);
cin.tie(NULL);
이유를 찾아보니 cin과 cout 보다는 scanf와 printf가 성능이 더 좋다는 것을 알게되어서 이렇게 입출력을 바꿔주니 정답이었다.
초기코드(cin, cout 사용)
#include "iostream"
#include "utility"
#include "vector"
#include "algorithm"
using namespace std;
vector<pair<int, int>> vp;
bool cmp(pair<int, int> p1, pair<int, int> p2)
{
if (p1.first == p2.first) {
return p1.second < p2.second; // x 좌표가 같을 때는 y 좌표로 비교
}
return p1.first < p2.first; // x 좌표로 비교
}
int main()
{
// 입출력 속도 최적화
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vp.reserve(n); // 미리 벡터의 메모리를 예약하여 성능 최적화
for (int i = 0; i < n; i++)
{
int x, y;
cin >> x >> y;
vp.push_back({ x,y });
}
sort(vp.begin(), vp.end(), cmp);
for (int i = 0; i < vp.size(); i++)
{
cout << vp[i].first << " " << vp[i].second << endl;
}
return 0;
}
정답코드(printf & scanf 사용)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int, int>> vp;
bool cmp(pair<int, int> p1, pair<int, int> p2) {
if (p1.first == p2.first) {
return p1.second < p2.second;
}
return p1.first < p2.first;
}
int main() {
int n;
scanf("%d", &n);
vp.reserve(n);
for (int i = 0; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
vp.push_back({ x, y });
}
sort(vp.begin(), vp.end(), cmp);
for (int i = 0; i < n; i++) {
printf("%d %d\n", vp[i].first, vp[i].second);
}
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]1181번. 단어정렬 (0) | 2024.09.23 |
---|---|
[백준][C++]11651번. 좌표 정렬하기 2 (0) | 2024.09.20 |
[백준][C++]1193번. 분수찾기 (2) | 2024.09.18 |
[백준][C++]2839번. 설탕 배달 (0) | 2024.09.17 |
[백준][C++]19532번. 수학은 비대면강의입니다 (0) | 2024.09.13 |