문제 출처:https://www.acmicpc.net/problem/11650
문제 분석
해당 문제는 인풋으로 주어진 여러 좌표들을 sort하면 되는 문제입니다.
bool compare(pair<int, int> & a, pair<int, int> & b){
if(a.first == b.first)
return a.second < b.second ;
return a.first < b.first ;
}
직접 위와 같이 compare 함수를 제작해도 되지만 piar는 기본적으로 STL에서 first 오름차순, 같다면 second 오름차순으로 정렬해주기 때문에 추가적으로 만들 필요는 없습니다.
코드는 다음과 같습니다:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std ;
int main(){
ios::sync_with_stdio(false) ;
cin.tie(NULL) ; cout.tie(NULL) ;
int N, x, y ;
vector<pair<int, int>> points ;
cin >> N ;
for(int i = 0 ; i < N ; i++){
cin >> x >> y ;
points.push_back({x, y}) ;
}
sort(points.begin(), points.end()) ;
for(auto pair : points)
cout << pair.first << " " << pair.second << "\n" ;
return 0 ;
}
별 탈없이 문제를 풀고 제출을 하는 가운데 시간초과 이슈를 만났습니다.
무엇이 문제인지 계속 고민을 하던 가운데 다른 분들의 코드를 유심히 살펴본 결과 std::endl ;
이 아닌 "\n"
으로 표현하셨다는 것을 캐치했습니다. std::endl ;
이라는 표현은 "\n"
과 같이 문장의 줄을 넘겨주는 역할과 동시에 출력버퍼를 비우는 작업을 시행한다고 합니다. 때문에 더 많은 시간이 걸려서 시간초과가 났었던 것입니다. 이 부분과 관련하여 아래 블로그를 참고하시면 이해에 도움이 될 것이라 생각됩니다:
그동안 코드의 시간을 줄이기 위해서 아래의 코드를 이용했었는데 ... 조큼 당황스러웠습니다.
ios::sync_with_stdio(false) ;
cin.tie(NULL) ; cout.tie(NULL) ;
해당 문제는 Github에서도 보실 수 있습니다:
https://github.com/gurcks8989/CodingTest/blob/master/BackJoon/HPS/P11650_Arrange_the_Coordinates.cpp
훈수 및 조언은 언제든 환영입니다.