N (1 ≤ N ≤ 100,000)이고 시간 제한이 1초라서 애초에 통과할 수 없는 코드입니다. sort함수에 대해 공부해 보세요.
11651번 - 좌표 정렬하기 2
ios_base ::sync_with_stdio(false);(C와 버퍼 동기화를 끊음)
cin.tie(NULL);
cout.tie(NULL);
(cin과 cout을 untie)
cin과 cout을 사용하실 경우 위 문장을 main함수 최상단에 삽입하면 속도가 빨라집니다.
또한, 벡터의 push_back은 기본적으로 O(1)이지만 기존 용량(capacity)를 넘을 경우 O(N)만큼의 시간복잡도를 갖습니다.(더 큰 공간(*2)을 잡고 기존 벡터를 복사, 해제) 벡터의 요소가 추가되면 될수록(capacity를 넘을 때마다) O(N)의 연산을 계속 하게 되겠죠. -> 최초 선언에서 vector <pair<int, int>> xy(N);(애초에 입력받을 크기만큼 할당) 로 바꿔주면 되겠죠?
마지막으로, 21번 코드부터의 for문은 사실상 필요치 않습니다. sort함수에 정렬 기준을 직접 정의하면 되기 때문이지요.(sort함수 한 번 사용으로 문제의 정렬 기준 모두 충족 가능) 아래에 예시코드 참고해 주제요. 생략을 좀 했지만 이해는 충분히 되실 겁니다.
댓글을 작성하려면 로그인해야 합니다.
kemin1910 1년 전
한 for문 안에 cin과 cout를 번갈아가면서 써준 것도 아닌데 어째서 시간 초과가 발생하는지 궁급합니다.