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;
}

+ Recent posts