문제 출처:https://www.acmicpc.net/problem/11650
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net

문제 분석
해당 문제는 인풋으로 주어진 여러 좌표들을 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"
과 같이 문장의 줄을 넘겨주는 역할과 동시에 출력버퍼를 비우는 작업을 시행한다고 합니다. 때문에 더 많은 시간이 걸려서 시간초과가 났었던 것입니다. 이 부분과 관련하여 아래 블로그를 참고하시면 이해에 도움이 될 것이라 생각됩니다:
[C++] std::endl이 \n과 다른 점 - 출력버퍼 이해하기
C++ 시작하는 친구가 문득 std::endl이랑 '\n'이랑 뭐가 다르냐고 물었다. 이전에 훑어보기론 std::endl 은 출력버퍼를 비우고 \n 은 그렇지 않다고 봐, 이렇게 설명을 해줬다. 그랬더니 버퍼가 뭐냐, 버
yechoi.tistory.com
그동안 코드의 시간을 줄이기 위해서 아래의 코드를 이용했었는데 ... 조큼 당황스러웠습니다.
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
GitHub - gurcks8989/CodingTest: CodingTest_study_with_c++
CodingTest_study_with_c++. Contribute to gurcks8989/CodingTest development by creating an account on GitHub.
github.com
훈수 및 조언은 언제든 환영입니다.
문제 출처:https://www.acmicpc.net/problem/11650
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net

문제 분석
해당 문제는 인풋으로 주어진 여러 좌표들을 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"
과 같이 문장의 줄을 넘겨주는 역할과 동시에 출력버퍼를 비우는 작업을 시행한다고 합니다. 때문에 더 많은 시간이 걸려서 시간초과가 났었던 것입니다. 이 부분과 관련하여 아래 블로그를 참고하시면 이해에 도움이 될 것이라 생각됩니다:
[C++] std::endl이 \n과 다른 점 - 출력버퍼 이해하기
C++ 시작하는 친구가 문득 std::endl이랑 '\n'이랑 뭐가 다르냐고 물었다. 이전에 훑어보기론 std::endl 은 출력버퍼를 비우고 \n 은 그렇지 않다고 봐, 이렇게 설명을 해줬다. 그랬더니 버퍼가 뭐냐, 버
yechoi.tistory.com
그동안 코드의 시간을 줄이기 위해서 아래의 코드를 이용했었는데 ... 조큼 당황스러웠습니다.
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
GitHub - gurcks8989/CodingTest: CodingTest_study_with_c++
CodingTest_study_with_c++. Contribute to gurcks8989/CodingTest development by creating an account on GitHub.
github.com
훈수 및 조언은 언제든 환영입니다.