관리 메뉴

cococo-coding

[C++ 풀이] 2751번. 수 정렬하기 2 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 2751번. 수 정렬하기 2

_dani 2024. 1. 17. 19:38

문제

풀이

  • endl을 쓰면 시간초과가 나므로, \n으로 써준다.
  • 벡터와 sort정렬을 이용한다.

 

n을 입력받고, 벡터 v(n)을 선언해주었다.

n만큼 for문으로 돌려주면서 벡터의 원소들을 입력받았고, sort정렬로 오름차순 정렬을 해주었다.

정렬된 결과를 다시 출력해야하므로, for문으로 벡터v를 다시 출력해주었다. 

이때 정렬된 수들을 출력해줄때, 한 줄에 하나씩 출력을 하는 형태이므로 endl;을 이용해줬는데 계속 시간초과가 떠서 틀렸다.이 endl를 '\n'으로만 바꿔주었더니 바로 문제가 해결됐다. 

 

이 이유는 아래 블로그를 참고했는데, endl와 \n은 둘 다 개행을 해주지만

endl의 경우는 내부 버퍼를 채우기 때문에 더 느리다. 

그래서 보통은 \n을 사용해주는 것이 좋다고 한다. 

(출처: TIP) C++의 endl 함수를 쓰면 느린 이유 - untitleSSU (tistory.com))

코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

/*
    벡터와 sort정렬 이용하자!!

    1. 수의 개수 n을 입력받는다.
    2. n개의 수를 입력받는다.
    3. 오름차순으로 정렬한다.
    4. 정렬한 결과를 출력한다.
*/

int main() {
    //1
    int n;
    cin >> n;

    //2
    vector <int> v(n);
    
    for (int i = 0; i < n; i++) {
       cin >> v[i];
    }
    
    //3
    sort(v.begin(), v.end());
    //v.erase(unique(v.begin(), v.end()), v.end());

    //4
    for (int i = 0; i < n; i++) {       
        cout << v[i] << '\n';
    }

    return 0;
}